我已经在.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);
}
答案 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
循环以使用<
代替<=