#include<iostream.h> void InsertSort(int *&a,int n)//插入排序 { int i; int j; int temp; for(i=1;i<n;i++) { temp=a[i]; for(j=i-1;j>=0;j--) { if(a[j]>temp) a[j+1]=a[j]; else break; } a[j+1]=temp; } } void SelectSort(int *&a,int n)//选择排序 { int i; int j; int temp; int min; for(i=0;i<n;i++) { min=i; temp=a[i]; for(j=i+1;j<n;j++) if(a[j]<a[min]) min=j; a[i]=a[min]; a[min]=temp; } } void BubbleSort(int *&a,int n)//冒泡排序 { int i; int j; int temp; for(i=0;i<n;i++) for(j=0;j<n-i-1;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } void ShellSort(int *&a,int n)//希尔排序 { int i; int j; int temp; int m=n/2; while(m>=1) { for(i=m;i<n;i++) { j=i-m; temp=a[i]; while((a[j]>temp)&&(j>=0)) { a[j+m]=a[j]; j=j-m; } a[j+m]=temp; } m=m/2; } } void QuickSort(int *&a,int m,int n)//快速排序 { int i=m,j=n; int temp=a[i]; if(i<j) { while(i<j) { while(a[j]>temp&&j>i) j--; if(j>i) a[i]=a[j]; while(a[i]<=temp&&j>i) i++; if(j>i) a[j]=a[i]; } a[i]=temp; QuickSort(a,m,i-1); QuickSort(a,i+1,n); } } void merge(int *&a,int p,int q,int r)//用插入排序合并两有序列 { int i; int j; int temp; for(i=q+1;i<=r;i++) { temp=a[i]; for(j=i-1;j>=p;j--) if(a[j]>temp) a[j+1]=a[j]; else break; a[j+1]=temp; } } void MergeSort(int *&a,int m,int n)//归并排序 { int i=m,j=n; int k; if(m<n) { k=(i+j)/2; MergeSort(a,m,k); MergeSort(a,k+1,n); merge(a,m,k,n); } } void display(int *a,int n) { int i; cout<<"排序后的顺序为:"; for(i=0;i<n;i++) cout<<a[i]<<" "; } void main() { int i; int n; int j; cout<<"请输入待排序的个数:"; cin>>n; int *a=new int[n]; cout<<"请输入待排序数:"; for(i=0;i<n;i++) cin>>a[i]; cout<<"请输入排序的方式:"<<endl; cout<<"1:插入排序"<<endl; cout<<"2:选择排序"<<endl; cout<<"3:冒泡排序"<<endl; cout<<"4:希尔排序"<<endl; cout<<"5:快速排序"<<endl; cout<<"6:归并排序"<<endl; cout<<"请输入排序的方式:"; cin>>j; switch(j) { case 1:InsertSort(a,n);break; case 2:SelectSort(a,n);break; case 3:BubbleSort(a,n);break; case 4:ShellSort(a,n);break; case 5:QuickSort(a,0,n-1);break; case 6:MergeSort(a,0,n-1);break; } display(a,n); cout<<endl; }