#include <iostream> using namespace std; //插入排序 void insertion(int a[],int N) { int p,j; for(p = 1; p < N; p++) { int temp = a[p]; for(j = p; j > 0 && a[j-1] > temp; j--) { a[j] = a[j-1]; } a[j] = temp; } } //希尔排序 void shellSort(int a[],int N) { int Increment,p,j; int temp; for(Increment = N/2; Increment > 0; Increment /=2) for(p = Increment; p < N; p++) { temp = a[p]; for(j = p; j >= Increment && a[j-Increment] > temp; j-=Increment) a[j] = a[j-Increment]; a[j] = temp; } } //选择排序 void chooseSort(int a[],int N) { int i,j; for(i = 0; i < N; i++) for(j = i+1; j < N; j++) { if(a[j] < a[i]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } } //冒泡排序 void maopaoSort(int a[],int N) { int i , j; for(i = 1; i < N; N--) for(j = 1; j < N; j++) { if(a[j] < a[j-1]) { int temp = a[j]; a[j] = a[j-1]; a[j-1] = temp; } } } //堆排序 void Swap(int &a, int &b) { int temp = a; a = b; b = temp; } void MaxHeapModify(int a[], int i, int size) { int left = 2*i + 1; int right = 2*i; int large = i; if(left < size && a[left] > a[large]) { large = left; } if((right < size) && (a[right] > a[large])) { large = right; } if(i != large) { Swap(a[i],a[large]); MaxHeapModify(a,large,size); } } void BuildMaxHeap(int a[],int N) { for(int i = N/2-1; i >= 0; i--) { MaxHeapModify(a,i,N); } } void HeapSort(int a[], int N) { BuildMaxHeap(a,N); for(int i = N-1; i >0; i--) { Swap(a[0],a[i]); MaxHeapModify(a,0,i); } } //归并排序 void Merge(int a[], int b[], int Lpos, int Rpos, int Rend) { int i,Lend,num,tempos; Lend = Rpos-1; tempos = Lpos; num = Rend - Lpos + 1; while(Lpos <= Lend && Rpos <= Rend) { if(a[Lpos] <= a[Rpos]) b[tempos++] = a[Lpos++]; else b[tempos++] = a[Rpos++]; } while(Lpos <= Lend) { b[tempos++] = a[Lpos++]; } while(Rpos <= Rend) { b[tempos++] = a[Rpos++]; } for(i = 0; i < num; i++,Rend--) { a[Rend] = b[Rend]; } } void Msort(int a[], int b[], int left, int right) { int center; if(left < right) { center = (left + right)/2; Msort(a,b,left,center); Msort(a,b,center+1,right); Merge(a,b,left,center+1,right); } } void MergeSort(int a[], int N) { int *b = new int(N); if(b != NULL) { Msort(a,b,0,N-1); //delete b; } else { cout<<"申请内存失败!"<<endl; } } //快速排序 void InsertionSort(int a[],int n) { int j,p; int temp; for(p=1;p<n;p++) { temp=a[p]; for(j=p;j>0&&a[j-1]>temp;j--) a[j]=a[j-1]; a[j]=temp; } } void swap(int &a, int &b) { int temp = a; a = b; b = temp; } int Median(int a[], int left, int right) { int center = (left + right)/2; if(a[left] > a[center]) swap(a[left],a[center]); if(a[left] > a[right]) swap(a[left],a[right]); if(a[center] > a[right]) swap(a[center],a[right]); swap(a[center],a[right-1]); return a[right-1]; } void Qsort(int a[], int left, int right) { if(left + 3 <= right) { int p = Median(a,left,right); int i = left; int j = right-1; for(;;) { while(a[++i] < p){} while(a[--j] > p){} if(i < j) { swap(a[i],a[j]); } else break; } swap(a[i],a[right-1]); Qsort(a,left,i-1); Qsort(a,i+1,right); } else { InsertionSort(a+left, right-left+1); } } void QuickSort(int a[], int N) { Qsort(a,0,N-1); } //打印输出 void print(int a[],int n = 5) { for(int j = 0; j < n; j++) { cout<<a[j]<<" "; } } int main() { int a[5]; cout<<"请输入5个数:"<<endl; for(int i = 0; i < 5; i++) { cin>>a[i]; } print(a); cout<<endl; //insertion(a,5); //shellSort(a,5); //chooseSort(a,5); //maopaoSort(a,5); //HeapSort(a,5); //MergeSort(a,5); QuickSort(a,5); print(a); return 0; }