![](/img/trans.png)
[英]sorting array of structures using bubble sort - how to speed up exchange of struct members
[英]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.