准备下上机考试,各种排序!!以后再添加和仿真像wiki上那样!

  1 #include <stdio.h>
  2 #include <string.h>
  3 #define N 6
  4 typedef struct
  5 {
  6     char name[10];
  7     int score;
  8 }student;
  9 //选择排序
 10 void sort1 (student a[])
 11 {
 12     int i,j,min;
 13     student st;
 14     for(i=0;i<N-1;i++)
 15     {
 16         min=i;
 17         for(j=i+1;j<N;j++)
 18         {
 19             if(a[min].score>a[j].score)
 20                 min=j;            
 21         }
 22         if(min!=i)
 23         {
 24             st=a[min];
 25             a[min]=a[i];
 26             a[i]=st;
 27         }
 28     }
 29 }
 30 //插入排序
 31 void sort2 (student a[])
 32 {
 33     int i,j;
 34     student st;
 35     for(i=1;i<N;i++)
 36     {
 37         st=a[i];
 38         
 39         for(j=i;j>0&&a[j-1].score>st.score;j--)
 40             a[j]=a[j-1];
 41         a[j]=st;
 42     }
 43 }
 44 //冒泡排序
 45 void sort3 (student a[])
 46 {
 47     int i,j;
 48     student st;
 49     for(i=0;i<N-1;i++)
 50     {
 51         for(j=0;j<N-i-1;j++)
 52         {
 53             if(a[j].score>a[j+1].score)
 54             {
 55                 st=a[j];
 56                 a[j]=a[j+1];
 57                 a[j+1]=st;
 58             }
 59         }
 60     }
 61 }
 62 //快速排序
 63 void sort4 (student a[],int left,int right)
 64 {
 65     int l=left,r=right;
 66     student temp;
 67     if(l<r)
 68     {
 69         temp=a[l];
 70         while(l!=r)
 71         {
 72             while(r>l&&a[r].score>temp.score) --r;
 73             if(l<r)
 74             {
 75                 a[l]=a[r];
 76                 ++l;
 77             }
 78             while(l<r&&a[l].score<temp.score) ++l;
 79             if(l<r)
 80             {
 81                 a[r]=a[l];
 82                 --r;
 83             }
 84         }
 85         a[l]=temp;
 86         sort4(a,left,l-1);
 87         sort4(a,l+1,right);
 88     }
 89 }
 90 void print(student s[])
 91 {
 92     int i;
 93     for(i=0;i<N;i++)
 94     {
 95         printf("%s %d 
",s[i].name,s[i].score);
 96     }
 97     printf("
");
 98 }
 99 int main()
100 {
101     int key;
102     student s[N]={{"x",90},{"y",80},{"z",60},{"w",50},{"c",50},{"h",40}};
103     printf("1~4继续选择:
1、比较排序
2、插入排序
3、冒泡排序
4、快速排序
按其他键退出
");
104     while(scanf("%d",&key)!=0)
105     {    
106         switch(key)
107         {
108         case 1:
109             //比较排序
110             printf("比较排序结果:
");
111             sort1(s);
112             print(s);
113             break;
114         case 2:
115             //插入排序
116             printf("插入排序结果:
");
117             sort2(s);
118             print(s);
119             break;
120         case 3:
121             //冒泡排序
122             printf("冒泡排序结果:
");
123             sort3(s);
124             print(s);
125             break;
126         case 4:
127             //快速排序
128             printf("快速排序结果:
");
129             sort4(s,0,N-1);
130             print(s);
131             break;
132         default : 
133             return 0;
134             break;
135         }
136     }
137     return 0;
138 }
原文地址:https://www.cnblogs.com/xiaoding/p/3633851.html