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 \n",s[i].name,s[i].score);
96 }
97 printf("\n");
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继续选择:\n1、比较排序\n2、插入排序\n3、冒泡排序\n4、快速排序\n按其他键退出\n");
104 while(scanf("%d",&key)!=0)
105 {
106 switch(key)
107 {
108 case 1:
109 //比较排序
110 printf("比较排序结果:\n");
111 sort1(s);
112 print(s);
113 break;
114 case 2:
115 //插入排序
116 printf("插入排序结果:\n");
117 sort2(s);
118 print(s);
119 break;
120 case 3:
121 //冒泡排序
122 printf("冒泡排序结果:\n");
123 sort3(s);
124 print(s);
125 break;
126 case 4:
127 //快速排序
128 printf("快速排序结果:\n");
129 sort4(s,0,N-1);
130 print(s);
131 break;
132 default :
133 return 0;
134 break;
135 }
136 }
137 return 0;
138 }
