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 }