其思想就是 在 一堆数字里面找一个 枢纽数字 然后将数字分成了两堆 , 一个大于该数字,一个小于该数字. 然后去递归的治理 最后合并一下就OK了.
---------------附上一个极为简陋的代码-------------------
// 依然是 递归实现~~~好恶心. void Quicksort( ElementType A[], int N ) { if(N<2) return; pivot = 从A[] 中选一个主元; //主元选择的要恰当. 将S = { A[] pivot } 分成2 个独立子集: A1={a∈S|a<=pivot } 和 和 A2={a∈S|a>=pivot }; A[] = Quicksort(A1,N1) {pivot} Quicksort(A2,N2); }
在我们去 取主元的话 我们经常是 去 头中尾 这三个数字之中的中位数.
第一步 筛选主元
ElementType Median3(ElementType 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]); //这样 最后两个数字有序了. //只需要考虑 A[left+1]-A[righ-2] 就可以了. return A[right-1]; }
第二步 子集划分