快排
快速排序
#include "iostream.h" using namespace std; int findMedian(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]); } //A[right]已经大于A[center] swap(A[center],A[right-1]); return A[right-1]; } void insertSort(int *A, int left,int right){ for(int i=left+1;i<=right;i++){ int p = A[i]; int j; for( j=i;j>=left&&A[j-1]>p;j--){ A[j]=A[j-1]; } A[j]=p; } } #define CUTOFF 5 void qsort(int *A, int left,int right){ if(left+CUTOFF<=right){ int pivot = findMedian(A,left,right); int i=left; int j=right-1; for(;;){ while(A[++i]<pivot){} while(A[--j]>pivot){} if(i<j){ //此时A[i]>=pivot&&A[j]<=pivot,交换二者位置 swap(A[i],A[j]); }else break; } swap(A[i],A[right-1]); qsort(A,left,i-1); qsort(A,i+1,right); }else{ insertSort(A,left,right); } } int main() { int A[100]; int N; cin>>N; for(int i=0;i<N;i++){ cin>>A[i]; } qsort(A,0,N-1); for(int i=0;i<N;i++){ cout<<A[i]<<" "; } cout<<endl; return 0; }