今天花了一上午的時間終於明白快速排序的原理了,這裡和大家分享一下。
比如有一串數字:52684 37,我們通過快速排序先找出第乙個數字 5 在這一串數字中的位置,然後再對數字 5 兩邊的數字進行同樣的排序方法,最終將整串數字排序完畢。
找到第乙個數字 5 的具體步驟如下:
從這串數字的兩頭出發,把第乙個數字的位置取名為 l (low),最後乙個數字的位置為 h (high)。在找第乙個數字的位置的過程中不斷相向移動 l 和 h 的位置,知道 l和 h的位置重疊在一起,此位置就是第乙個數字 5 所在的位置。
上面這張是為了說明這一串數字每個數字的初始位置。
上面這張圖 l 和 h 位是怎樣移動的。因為在一開始 h 位處在這串數字的尾端,即第7個位置上,因為數字 7 > 5,所以此時不需要 h 和 l位置上的數字進行交換。然後 h 位繼續向左移動,到了第6個位置,這個位置上的數字是3,因為 數字 3 < 5,所以,數字 3 和數字 5 要進行交換,結果就如上圖所示。
接下來
l 位移動到了位置2,在位置2處的數字為2,因為數字 2 < 5,所以此時不需要交換 l 和 h位置的數字,然後l位繼續向右移動,來到了位置3,此時,處於位置3處的數字是6,因為 6 > 5,所以,要交換數字 6 和數字5,結果就如上圖所示。
接下來重複上面的過程:
總之:就是不斷的尋找新的 l和新的 h位並且進行比較,如果l位上的數字 < h位上的數字則不替換,繼續尋找,反之,進行替換,再繼續尋找。一定要從 h位開始,依次向左移動。
最後l和h位在第四個位置處重疊,所以第四個位置就是數字5所在的序列中的位置。
注:這種快速排序的方法一次操作只能找出第乙個數字的具體位置,並不能對整串數字進行排序,所以需要重複這個過程,知道每個數字都能對應到正確的位置上為止。
資料結構學習筆記 排序
排序 就是要整理表中的元素,使之按關鍵字遞增 或遞減 有序排列。如果待排序的表中,存在有多個關鍵字相同的元素,經過排序後這些具有相同關鍵字的元素之間的相對 次序保持不變,則稱這種 排序演算法是穩定的。在排序過程中,若整個表都是放在記憶體中處理,排序時不涉及資料的內 外存交換,則稱之為 內排序 反之,...
資料結構學習筆記 7 非遞迴快速排序
快速排序,分而治之。在同為o n logn 的幾種排序方法中效率較高。ifndef quick sort h define quick sort h include assistance.h 輔助軟體包 include template void quicksort elemtype elem,in...
資料結構學習之 快速排序法
2013年3月25日 21 21 39 xulei 快速排序法 1.先找到第乙個元素的位置,把需要排序的序列分成兩個部分 2.分別對左 右部分進行第一步操作,直到左右部分只有乙個元素為止.如陣列 9 0 8 10 5 2 13 公升序排序 1.定義中間值 val 儲存第乙個元素值,兩個指標 low ...