某次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);
}

浙公网安备 33010602011771号