某次c语言考试我抽到的一道题
问题:输入50名员工姓名,工资号,工资,按工资降序输出。
问题很简单,但当时我的程序出现总线错误,我水平不够,也调不出来,幸好老师压根没运行。。。。。。。。春哥保佑!!!!!!!!!!!!!
这是新写的一个解法,思路很简单,主要是有个优化版快速排序,高手就不用看了。。。。。。。
个人感觉那个do-while写的很飘逸~~~~~
#include <stdio.h> #include <stdlib.h> #define MAXL 50 #define MAXLONG 32 struct person { char name[MAXLONG]; char number[MAXLONG]; long salary; }; struct person comp[MAXL],temp; int i; void sort(struct person *p,int x1,int x2); int main() { for(i=0;i<MAXL;++i) { printf("\n请输入第%d个人的姓名\n",i+1); scanf_s("%s",comp[i].name,MAXLONG); printf("\n请输入第%d个人的工资号\n",i+1); scanf_s("%s",comp[i].number,MAXLONG); printf("\n请输入第%d个人的工资\n",i+1); scanf_s("%ld",&(comp[i].salary)); } sort(comp,0,MAXL-1); printf("\n\n姓名 工资号 工资\n"); for(i=0;i<MAXL;++i) printf("%-13s%-14s%ld\n",comp[i].name,comp[i].number,comp[i].salary); system("pause"); return 0; } void sort(struct person *p,int x1,int x2) { int t1=x1,t2=x2; for(;t1!=t2;) { do { for(;p[t1].salary<p[t2].salary;++t1); if(t1==t2) break; }while((p[t1].salary==p[t2].salary)||(temp=p[t1],p[t1]=p[t2],p[t2]=temp,--t2,0)); do { for(;p[t1].salary<p[t2].salary;--t2); if(t1==t2) break; }while((p[t1].salary==p[t2].salary)||(temp=p[t1],p[t1]=p[t2],p[t2]=temp,++t1,0)); } if(t1>x1+1) sort(p,x1,t1-1); if(t2<x2-1) sort(p,t2+1,x2); }