如何保持结构的成员与冒泡排序?

时间:2018-04-10 04:29:14

标签: c sorting bubble-sort

我已经在.csv文件中创建了一个名单列表,我正在尝试按字母顺序对它们进行排序。现在我有了一系列结构。该结构只有2个成员,即名字和姓氏。我的泡泡排序基于名字排序,这是我想要的,但我怎么能用它们保留姓氏?当我打印出阵列时,姓氏不与第一个名字对齐。

void bubbleSort(cred name[], int n) { 

  char temp[25];
  int i,j;

  for(i=1;i<=n;i++)
    for(j=0;j<=n-i;j++)
      if(strcmp(name[j].first,name[j+1].first)>0)
      { 
        strcpy(temp,name[j].first);
        strcpy(name[j].first,name[j+1].first);
        strcpy(name[j+1].first,temp);
      }

   printf("The strings appears after sorting :\n");
   for(i=0;i<=n;i++)
     printf("%s  %s\n",name[i].first,name[i].last);
}

2 个答案:

答案 0 :(得分:3)

我认为你的逻辑听起来很合理,有人可以自由纠正我,但是每当你交换名字时你也应该换掉你的姓氏。

你也可以创建一个类型为cred swap的temp,使用下一个类型为cred的数组的前一个元素。

答案 1 :(得分:1)

简单地替换

    strcpy(temp,name[j].first);
    strcpy(name[j].first,name[j+1].first);
    strcpy(name[j+1].first,temp);

    cred t = name[j];
    name[j] = name[j+1];
    name[j+1] = t;

由于结构可以相互分配,因此不需要按成员复制成员。

另请注意,您的所有for循环都使用<= - 例如:

for(i=1;i<=n;i++)
         ^^
         here

这似乎是一个错误,因为n可能代表数组中元素的数量。所以你的代码索引越界。

因此,请更改所有for循环以使用<代替<=