繁体   English   中英

如何将结构成员与冒泡排序保持在一起?

[英]How can I keep members of a struct together with 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);
}

我认为您的逻辑听起来不错,有人可以自由地纠正我,但是每当交换名字时,也应该交换姓氏。

您也可以创建一个cred类型的临时文件,将数组的前一个元素与下一个类型均为cred的元素交换。

只需更换

    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循环更改为使用<代替<=

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM