C语言如何将结构体中的所有成员按照其中一个成员的排序方式输出?

C语言如何将结构体中的所有成员按照其中一个成员的排序方式输出?如图,排序模块,按工资卡号升序输出,求指教,最好有代码。

将结构体数组SI[MAX]使用排序算法然后输出即可。

以下给题主列出对SI[MAX]的冒泡排序代码:

void bubbleSort(struct Salary_Info arr[], int len) {
int i, j
struct Salary_Info temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}

调用bubbleSort函数:

bubbleSort(SI, MAX) /*注意这里的MAX需要换成实际的数组长度(职工人数)*/

追问

这只是单纯的从大到小排序?但是不能按照要求啊,比如按工资卡号或者按姓姓氏拼音顺序排序

追答

纯数字的工资卡号,bubbleSort函数可以直接用于排序。
如果按姓氏拼音排序,那么需要有一个char字段存储着姓氏拼音首字母,然后用bubbleSort函数也能排序。
注意1:bubbleSort函数中 arr[j] > arr[j + 1] 这一句在使用时需要指向结构体数组中具体的对比元素。比如按工资卡号,需改成 arr[j].Card_No > arr[j + 1].Card_No
注意2:原回答的bubbleSort函数是“由小到大排序”,如果要实现“由大到小”,需要把 arr[j] > arr[j + 1] 改成<即可。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-06-26
可以使用qsort函数进行排序,这个可以自定义排序的规则。
struct Salary_info{
int Card_No;
char name[20];
};

int cmp_Card_No(const void *a,const void *b)
{
struct Salary_info *aa = (struct Salary_info *)a;
struct Salary_info *bb = (struct Salary_info *)b;

return (aa->Card_No > bb->Card_No ? 1 : -1 );
}
int main()
{
struct Salary_info SI[3] ={{3,"LiBai"},{1,"LiSi"},{2,"LiWu"}};
qsort(SI,3,sizeof(SI[0]),cmp_Card_No);
int i;
for(i = 0;i < 3;i ++)
{
printf("ID:%d name:%s\n",SI[i].Card_No,SI[i].name);
}
return 0;
}追问

可以详细说一下吗?谢谢

追答

我不是帖出代码了吗,APP看不到,从网页登就能看到。

追问

哦哦,谢谢,那如果是姓名按照字典序排列的话,我按照百度上的那样写为什么提示语法错误?

追答

哪里有错?截图看看,我测过才发的,应该没问题才对。

要加stdlib.h头文件哦

追问

头文件加了

还有之前那两个comp1与comp2中的a,b没定义是为什么

vc6.0下运行的

追答

你改型参了,a,b对应你的p1 p2

追问

哦哦,明白了,为什么comp3提示')'有语法错误

本回答被提问者采纳
相似回答