快排,查找第K大的数
快排
1 int partition(int A[],int n,int p,int q){ 2 int i=p; 3 for(int j=p+1;j<=q;j++){ 4 if(A[j]<=A[p]){ 5 i++; 6 swap(A[i],A[j]); 7 } 8 } 9 swap(A[i],A[p]); 10 return i; 11 } 12 // 13 14 void quickSort(int A[],int n,int p,int q){ 15 if(q<p) return; 16 int r=partition(A,n,p,q); 17 quickSort(A,n,p,r-1); 18 quickSort(A,n,r+1,q); 19 }
快排用于选择第K大的数,平均时间复杂度O(n),最坏O(n^2)