#include#include using namespace std;/*简单插入排序:最差时间复杂度:O(n^2)平均时间复杂度:O(n^2)*/void Insertion_Sort(int *a,int n){ int i,j; for(i=2;i<=n;i++) if(a[i] a[0];j--) a[j+1]=a[j]; a[j+1]=a[0]; }}/*折半插入排序:最差时间复杂度:O(n^2)平均时间复杂度:O(n^2)*/void Bin_Sort(int *a,int n){ int i,j,low,mid,high; for(i=2;i<=n;i++) if(a[i] a[0]) high=mid-1; else low=mid+1; } for(j=i-1;j>high;j--) a[j+1]=a[j]; a[high+1]=a[0]; }}/*选择排序:最差时间复杂度:O(n^2)平均时间复杂度:O(n^2)*/void Selection_Sort(int *a,int n){ int i,j,k; for(i=1;i a[j]) k=j; if(k!=i) swap(a[k],a[i]); }}/*快速排序最差时间复杂度:O(n^2)平均时间复杂度:O(nlogn)*/void Quick_Sort(int *a,int low,int high){ int i=low,j=high; a[0]=a[low]; while(low =a[0]) high--; swap(a[low],a[high]); while(low a[i+1]) { change=true; swap(a[i],a[i+1]); } }}/*鸡尾酒排序(双向冒泡排序):最差时间复杂度:O(n^2))平均时间复杂度:O(n^2)*/void Cocktail_Sort(int *a,int n){ int i; int left=1,right=n; bool change=true; while(change) { change=false; for(i=left;i a[i+1]) { change=true; swap(a[i],a[i+1]); } right--; for(i=right;i>left;i--) if(a[i] =a[i]) break; else { a[low]=a[i]; low=i; } a[low]=a[0]; }}void Heap_Sort(int *a,int n){ int i; for(i=n/2;i>=1;i--) Heap_Adjust(a,i,n); for(i=n;i>=2;i--) { swap(a[1],a[i]); Heap_Adjust(a,1,i-1); }}/*希尔排序最差时间复杂度:O(n^2)平均时间复杂度:O(n^1.3)*/void Shell_Sort(int *a,int n){ int i,j; int gap=n/2; while(gap) { for(i=gap+1;i<=n;i++) if(a[i] 0 && a[j]>a[0];j-=gap) a[j+gap]=a[j]; a[j+gap]=a[0]; } gap/=2; }}/*计数排序:最差时间复杂度:O(n+k)平均时间复杂度:O(n+k)*/void Counting_Sort(int *a,int n){ int i; int max=a[1]; for(i=2;i<=n;i++) { if(max a[i+1]) { change=true; swap(a[i],a[i+1]); } for(i=2;i a[i+1]) { change=true; swap(a[i],a[i+1]); } }}/*地精排序(侏儒排序):最差时间复杂度:O(n^2)平均时间复杂度:O(n^2)*/void Gnome_Sort(int *a,int n){ int i=0; while(i =1 && a[i]<=a[i+1])) i++; else { swap(a[i],a[i+1]); i--; } }}void Out(int *a,int n){ int i; for(i=1;i<=n;i++) cout< <<" "; cout<