用strcmp和bubblesort排序C中的2d数组

时间:2014-12-03 00:19:25

标签: c arrays sorting multidimensional-array

我需要按照字典排序的方式对给定的2d数组(char crossword [40] [20])进行排序。
填字游戏[40] [20]包含:

TYPE
GUITARIST
VAIN
ROME
MARRIAGE
NOODLE
ANT
IN
PETROL
CUT
LIE
ATOM
MOUTH
ENVELOPE
IN
AT
AGE
ART
INTERIOR
AT
ROBBERY
AT
AIR
STIR
NO
IT
SMILE
NIGHT
ACE
MANDATORY
TO
NY
DO
OZONE
ON
UNDERWATER
NOUN

所以填字游戏[0] [列] = TYPE,填字游戏[1] [columns] = GUITARIST等
并且必须像这样转换为字典顺序:

ACE  
ANT  
...  
...  
...  
VAIN

当然我知道如何对1d阵列进行起泡,但是如上所述2d会发生什么? 我只想要线条,所以单词的字母保持不变。 如果代码包含strcmp,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

int strcmp ( const char * str1, const char * str2 );

返回str1 < str2的负值,str1 > str2的正值和str1 = str2的零值。

听起来很有用。请记住,C中的单词只是char的数组。因此,我们可以迭代执行strcmp (...)的单词以获取索引。

现在我们几乎在一维数组中对整数进行排序。

我们还需要一个临时变量(就像整数的标准冒泡排序一样)。记住在交换对象时使用strcpy()

所以我们的代码看起来像是

#define MAX 40

int i, j;

char temp[20];
for (i = 0; i < MAX-1; ++i)
{
    for (j = i+1; j < MAX; ++j)
    {
        if (strcmp (words[i], words[j]) > 0)
        {
            strcpy (temp, words[i]);
            strcpy (words[i], words[j]);
            strcpy (words[j], temp);
        }
    }
}

注意: - 尚未经过我的测试。