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

posted @ 2010-10-23 00:27  幻魇  阅读(201)  评论(0编辑  收藏  举报