如何对结构类型进行排序

问题描述 投票:0回答:1

我有一个ElementType结构

typedef struct
{
    int AtomicNumber;
    char Name[31];
    char Symbol[4];
} ElementType;

我正在尝试实现一种排序算法,该算法将按字母顺序对元素进行排序。我比较字符串,但没有任何效果。我无法确定下面的函数出了什么问题。

void sortAlphabetical(ElementType elements[NUM_ELEMENTS])
{
   printf("SORTING!\n");
   int c, d;
   for (c = 0 ; c < NUM_ELEMENTS - 1; c++)
   {
       for (d = 0 ; d < NUM_ELEMENTS - c - 1; d++)
       {
           if (elements[d].Name > elements[d+1].Name)
           {
                ElementType temp;

                temp.AtomicNumber = elements[d].AtomicNumber;
                strcpy(temp.Name, elements[d].Name);
                strcpy(temp.Symbol, elements[d].Symbol);

                elements[d].AtomicNumber = elements[d+1].AtomicNumber;
                strcpy(elements[d].Name, elements[d+1].Name);
                strcpy(elements[d].Symbol, elements[d+1].Symbol);

                elements[d+1].AtomicNumber = temp.AtomicNumber;
                strcpy(elements[d+1].Name, temp.Name);
                strcpy(elements[d+1].Symbol, temp.Symbol);
           }
       }
   }
}
c algorithm sorting
1个回答
5
投票
if (elements[d].Name > elements[d+1].Name)

C的>运算符不够“聪明”,无法按字典顺序比较字符串;它仅适用于数字或指针。这种情况实际上只是将char*指针与名称的第一个字符进行比较。

相反,您需要strcmp功能:

strcmp

而且,您可能不考虑编写自己的冒泡排序,而是考虑到if (strcmp(elements[d].Name, elements[d+1].Name) > 0) ,因为它恰好适用于这种情况,它写起来稍微容易一些,并且对于大型数组可能更快:

qsort
© www.soinside.com 2019 - 2024. All rights reserved.