堆排序 #include<stdio.h> void CreatHeap(int a[],int n,int h) { int i,j,flag,temp; i=h; j=2*i+1; temp=a[i]; flag=0; while(j<n && flag!=1) { if(j<n-1 && a[j]<a[j+1]) j++; if(temp>a[j]) flag=1; else { a[i]=a[j]; i=j; j=2*i+1; } } a[i]=temp; } void InitCreatHeap(int a[],int n) { int i; for(i=(n-1)/2;i>=0;i--) CreatHeap(a,n,i); } void HeapSort(int a[],int n) { int i,temp; InitCreatHeap(a,n); for(i=n-1;i>0;i--) { temp=a[0]; a[0]=a[i]; a[i]=temp; CreatHeap(a,i,0); }
} main() { int n,i,a[100]; printf("请问你要输入几个排序数:\n"); scanf("%d",&n); printf("请输入你要排序的数值:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); HeapSort(a,n); printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); } ------------------------------------------------------------- 对半排序 #include<stdio.h> main() { int i,j,temp, low,high,mid,a[100],n; printf("请问你要输入几个数字:\n"); scanf("%d",&n); printf("请输入数字:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=1;i<n;i++) { temp=a[i]; low=0; high=i-1; while(high>=low) { mid=(low+high)/2; if(temp<a[mid]) high=mid-1; else low=mid+1; } for(j=i-1;j>=low;j--) a[j+1]=a[j]; a[low]=temp; } printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); } --------------------------------------------- 快速排序 #include<stdio.h> void QuickSort(int a[],int low,int high){ int i=low,j=high; int temp=a[low]; while(i<j) { while(j>i&&temp<=a[j]) j--; if(j>i) { a[i]=a[j]; i++; } while(j>i&&a[i]<temp) i++; if(j>i) { a[j]=a[i]; j--; } } a[i]=temp; if(low<i) QuickSort(a,low,i-1); if(i<high)QuickSort(a,j+1,high); } main() { int a[100]; int high ,low,i,n; printf("请问你要输入几个数字:\n"); scanf("%d",&n); printf("请输入数字:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); low=0; high=n-1; QuickSort(a,low,high); printf("排序后的:\n"); for( i=0;i<n;i++) printf("%d\t",a[i]); } -------------------------------------- 冒泡 #include<stdio.h> main() {int i,j,temp,n,a[100],flag=1; printf("请问你要输入几个排序数:\n"); scanf("%d",&n); printf("请输入你要排序的数值:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n&&flag==1;i++) { flag=0; for(j=1;j<n-i;j++) if(a[j]<a[j-1]) { flag=1; temp=a[j-1]; a[j-1]=a[j]; a[j]=temp; } } printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); } --------------------------------------------------------- 希尔 #include<stdio.h> void ShellSort(int a[],int n,int d[],int numOfD) { int i,j,k,m,span,temp; for(m=0;m<=numOfD;m++) { span=d[m]; for(k=0;k<span;k++) { for(i=k;i<n-span;i=i+span) { temp=a[i+span]; j=i; while(j>-1&&temp<=a[j]) { a[j+span]=a[j]; j=j-span; } a[j+span]=temp; } } }
} main() {int a[100], b[10],n,i,k,j; printf("请问你要输入几个数字:\n"); scanf("%d",&n); printf("请输入数字:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); j=n; k=0; do{ j=j/2; b[k]=j; k++; }while(j>0); ShellSort(a,n,b,k); printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); } --------------------------------------------- 选择排序 #include<stdio.h> main() {int a[100], min,i,k,temp,j,cout; printf("请问你要输入几个数字(不要超过100个!!):\n"); scanf("%d",&cout); printf("请输入数字:\n"); for(i=0;i<cout;i++) scanf("%d",&a[i]); for(i=0;i<cout;i++) { min=i; for(k=i+1;k<cout;k++) { if(a[min]>a[k]) { min=k; } }if(i!=min) { temp=a[i]; a[i]=a[min]; a[min]=temp; } } for(j=0;j<cout;j++) printf("%d\t",a[j]); } ------------------------------------------ 直接插入 #include<stdio.h> main() { int i,j,n,temp,a[100]; printf("请问你要输入几个数字:\n"); scanf("%d",&n); printf("请输入数字:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n-1;i++) { j=i; temp=a[i+1]; while(temp<a[j]&&j>-1) { a[j+1]=a[j]; j--; } a[j+1]=temp; } printf("排序后的:\n"); for(i=0;i<n;i++) printf("%d\t",a[i]); } 还有个二路归并排序我不会.我过下就热情发上来给大家 我在数据结构论坛发了这7种排序。但是那边我全部附有抓图的.如果想去看看结果的.就去那边看看好了。 坚强依然!永不言苦!永不言败!睇透数据结构!编程编程再编程!-----------激情依旧
(我发的群就要满人了。如果加不进来的朋友我只能say sorry)