在資料結構裡快速排序演算法相比直接選擇排序,插入排序可以算是比較高效的演算法,是在2023年被提出來的,並不斷完善發展直到今天有三個方法的快速排序分別是
對於第一種方法是選擇乙個標準值(一般選擇第乙個數字或者最後乙個數字),設定兩個標記left和right
left從左到右找到比標準值大和相等的,right從右到左找比標準值小和相等的數字,再進行交換
開始,以5作為標準值,left向右移動right向左移動
找到了符合條件的值
交換結束後,繼續移動
直到left和right相遇,結束本次排序
將一段陣列分成了兩個陣列,再進行快速排序,直到無法再分割,結束排序,步驟類似下圖。
可以理解為每一次排序都有乙個數字分到了正確的位置,進行了logn次排序
以下為一次排序的**
int key = a[right];
int _key = right;
while(left=key&&left總的排序可以參考二叉樹的遍歷如下
if(left可以考慮優化,選擇標準值可以選最先最後以及中間的數字中屬於陣列中位數的數字
int mid(int left,int right,int *a)
if(a[right]>a[middle]>a[left])
if(a[middle]>a[left]>a[right])
if(a[right>a[left]>a[middle]])
if(a[left]>a[right]>a[middle])
if(a[middle]>a[right]>a[left])
}
再選完之後,要把選擇的數值和left或者right的數字進行位置上的交換(主要取決於是公升序還是降序)
如果是公升序要把right和mid交換,還可以考慮在迭代到最後幾層用直接插入演算法來排序,提高**的效率
資料結構 排序演算法 快速排序
演算法描述 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 n log n 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 n log n 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地...
資料結構 快速排序演算法
一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給key,即key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j 找到第乙個小於key的值a j 將a j 和a i 互換 4 從i開始向後搜尋,即由前開始向後搜尋 i ...
資料結構與演算法 排序演算法 快速排序
源 cpp view plain copy include void quicksort int int,int intfindposs int int,int intmain quicksort arry,0,6 printf after sorted n for i 0 i 7 i printf...