#include #include struct node { int key; }r[20]; struct rnode { int key; int point; }; main() { void print(struct node a[20],int n); int creat(); void shell(struct node a[20],int n); int hoare(struct node a[20],int l,int h); void quick1(struct node a[20],int n); void quick2(struct node a[20],int l,int h); void heap(struct node a[20],int i,int m); void heapsort(struct node a[20],int n); void merges(struct node a[20],struct node a2[20],int h1,int mid,int h2); void mergepass(struct node a[20],struct node a2[20],int l,int n); void mergesort(struct node a[20],int n); int yx(int m,int i); int radixsort(struct rnode a[20],int n); int num,l,h,c; struct rnode s[20]; c=1; while(c!=0) { printf(" 主菜单 \n"); printf(" 1 输入关键字,以-9999表示结束。\n"); printf(" 2 希尔排序 \n"); printf(" 3 非递归的快速排序 \n"); printf(" 4 递归的快速排序 \n"); printf(" 5 堆排序 \n"); printf(" 6 归并排序 \n"); printf(" 7 基数排序 \n"); printf(" 输入选择 (1--7,0表示结束): "); scanf("%d",&c); switch(c) { case 1:num=creat();print(r,num);break; case 2:shell(r,num);print(r,num);break; case 3:quick1(r,num);print(r,num);break; case 4:l=0;h=num-1;quick2(r,l,h); printf("output quick2sort result:\n"); print(r,num);break; case 5:heapsort(r,num);break; case 6:mergesort(r,num);print(r,num);break; case 7:radixsort(s,num); } } }//main end void print(struct node a[20],int n) { int i; for(i=0;i=1;i--) a[i].key=a[i-1].key; k=n/2; while(k>=1) { for(i=k+1;i<=n;i++) { a[0].key=a[i].key; j=i-k; while((a[j].key>a[0].key)&&(j>=0)) { a[j+k].key=a[j].key; j=j-k; } a[j+k]=a[0]; } k=k/2; } for(i=0;i=x.key)) j--; if(ia[j+1].key) j++; if(a[j].key0;i--) a[i].key=a[i-1].key; for(i=n/2;i>=1;i--) heap(a,i,n); printf("输出堆排序结果:\n"); for(v=n;v>=2;v--) { printf("%5d",a[1].key); x.key=a[1].key; a[1].key=a[v].key; a[v].key=x.key; heap(a,1,v-1); } printf("%5d",a[1].key); for(i=0;i=2*l) { h1=i; mid=h1+l-1; h2=i+2*l-1; merges(a,a2,h1,mid,h2); i=i+2*l; } if((n-i)<=l) for(j=i;j<=n;j++) a2[j].key=a[j].key; else { h1=i; mid=h1+l-1; h2=n-1; merges(a,a2,h1,mid,h2); } }//mergepass end void mergesort(struct node a[20],int n) { int l; struct node a2[20]; l=1; while(l