五种排序算法
//-------------五种排序算法演示 #include "stdio.h" #include "stdlib.h" #include "math.h" #include "dos.h" #define Max 100 typedef int sqlist[Max+1]; void insertsort(sqlist a,int n) { int i,j; for(i=2;i<=n;i++) { if(a[i]<a[i-1]) { a[0]=a[i]; for(j=i-1;a[0]<a[j];--j) a[j+1]=a[j]; a[j+1]=a[0]; } } } void shellsort(sqlist r,int n) { int i,j,gap,x; gap=n/2; while(gap>0) { for(i=gap+1;i<=n;i++) { j=i-gap; while(j>0) if(r[j]>r[j+gap]) { x=r[j]; r[j]=r[j+gap]; r[j+gap]=x; j=j-gap; } else j=0; } gap=gap/2; } } void bubblesort(sqlist r,int n) { int i,j,w; for(i=1;i<=n-1;i++) for(j=n;j>=i+1;j--) if(r[j]<r[j-1]) { w=r[j]; r[j]=r[j-1]; r[j-1]=w; } } void selectsort(sqlist r,int n) { int i,j,k,temp; for(i=1;i<=n-1;i++) { k=i; for(j=i+1;j<=n;j++) if(r[j]<r[k]) k=j; temp=r[i]; r[i]=r[k]; r[k]=temp; } } int partion( sqlist a,int n,int low,int high) { int p,i; p=a[low]; a[0]=a[low]; while(low<high) { while(low<high&&a[high]>=p) --high; a[low]=a[high]; while(low<high&&a[low]<=p) ++low; a[high]=a[low]; } a[low]=a[0]; /* for(i=1;i<=n;i++) printf("%d ",a[i]); printf("\n\n");*/ return low; } void quicksort(sqlist a,int n,int low,int high) { int p,i; if(low<high) { p=partion(a,n,low,high); quicksort(a,n,low,p-1); quicksort(a,n,p+1,high); } } main() { int i,n=10; char ch; sqlist a; for(i=1;i<=10;i++) a[i]=11-i; printf("\n\n"); printf(" ┌─────────────┐\n"); printf(" │ 1---插入排序 │\n"); printf(" │ 2---希尔排序 │\n"); printf(" │ 3---冒泡排序 │\n"); printf(" │ 4---选择排序 │\n"); printf(" │ 5---快速排序 │\n"); printf(" │ 请选择(1--5) │\n"); printf(" └─────────────┘\n"); ch=getchar(); if(ch=='1') {printf("插入排序的结果是:\n");insertsort(a,n);} else if(ch=='2'){printf("希尔排序的结果是:\n");shellsort(a,n);} else if(ch=='3'){printf("冒泡排序的结果是:\n");bubblesort(a,n);} else if(ch=='4'){printf("选择排序的结果是:\n");selectsort(a,n);} else if(ch=='5'){printf("快速排序的结果是:\n");quicksort(a,n,1,n);} else printf("对不起,你选择的参数不对!"); for(i=1;i<=10;i++) printf("%5d",a[i]); }