左軸演算、中軸演算、右軸演算
題目:
高速排序法(quick sort)是眼下所公認最快的排序方法之中的乙個(視解題的物件而定),儘管高速排序法在最差狀況下能夠達o(n2)。可是在多數的情況下,高速排序法的效率表現是相當不錯的。
高速排序
- 演算法
1、高速排序法的基本精神是在數列中找出適當的軸心,然後將數列一分為二
2、分別對左邊與右邊數列進行排序
左軸演算:
// 高速排序 - 左軸演算
// 1. 附設兩個指標left/right,並設最左端的數為最初樞軸pivot
// 2. 從右向左搜尋,找到第乙個比pivot小的數,將其快取進樞軸位置
// 3. 從左向右搜尋,找到第乙個比pivot大的數。快取進上乙個比pivot小的數的位置程式進入2.迴圈
// 4. 最後一次交換後獲得的有效空位置為a[i] ,此時再將pivot賦值給a[i] 此時a[i]左邊的數比a[i]小,右邊的數比a[i]大
// 再分別對其左邊與左邊進行高速排序
int quicksort2(int a,int left,int right)
} if(i!=right)swaper(a[i],a[right]);
return i;
} int quicksort4(int a,int left,int right)
return 0;
}
演算法導論 第7章 高速排序
高速排序在最壞情況下的時間複雜度為o n 2 儘管在最壞情況下執行時間比較差,可是高速排序一般是用於排序的最佳選擇。由於其平均效能相當好,期望的執行時間為o nlgn 且在o nlgn 的記號中隱含的常數因子非常小。高速排序和合併排序有相似之處,都是須要劃分序列,在合併排序中。劃分的過程非常easy...
排序演算法之(7) 堆排序
堆排序主要是利用了堆的性質,對於大頂堆 堆中的每個節點的值都不小於它的孩子節點的值,詳細可參考我的另一篇部落格那麼大頂堆的堆頂元素就是當前堆中所有元素中最大的。利用這個性質,進行如下操作,則可以得到乙個有序序列 將待排序的n個元素乙個乙個插入堆中,那麼此時堆頂元素就是所有元素中最大的 將堆頂元素取出...
排序演算法之(7) 堆排序
堆排序 heap sort 就是利用堆 假設利用大頂堆 進行排序的方法。它的基本思想是,將待排序的序列構造成乙個大頂堆。此時,整個序列的最大值就是堆頂的根結點。將它移走 其實就是將其與堆陣列的末尾元素交換,此時末尾元素就是最大值 然後將剩餘的n 1個序列重新構造成乙個堆,這樣就會得到n個元素中的次小...