快速排序演算法詳解

2021-10-04 02:46:51 字數 1183 閱讀 6459

1.1 演算法分析

快速排序是一種不穩定的,時間複雜度為o(nlogn)的排序演算法.

基本思想:1.選定基準值key。

2.通過雙指標不斷地移動,將比key大的值移動到key的右邊,比key小的值移動到key的左邊,直到雙指標相遇(即代表該過程已完成)

3.上述過程完成後,對於以原key區分形成的兩個子陣列,分別重複1和2操作。

4.直到所有的子過程完成後,我們就得到了最後的有序陣列

快速排序採用了分治遞迴的思想,通過問題的分解,簡化為子問題求解。

1.2演算法描述

1.3 思路分析

接下來我們來模擬這一演算法思路:

假設有陣列:

78 21 98 55 64 33 82

則在第一步,我們以78作為基準值,資料變化如下:

key:78 從後往前,33比78小,得到:

(33) 21 98 55 64 ? 82

從前往後,98比78大

(33) 21 ? 55 64 (98) 82

之後:(33) 21 (64) 55 ? (98) 82

則此時我們得到:

(33) 21 (64) 55 78 (98) 82

則有33 21 64 55與98 82為子陣列

對於33 21 64 55:

? 21 64 55=>21 ? 64 55

得到新的子陣列:21與64 55

則有陣列:21 33 55 64

另外一部分同理,則得到最後結果:

21 33 55 64 78 82 98

2.1**:

void quicksort(int arrs, int low, int high)

if (i < j)

}//這是指標已經相遇,則此位置即為key所在的位置

arrs[i] = key;

//我們得到的新陣列,其位置下標就是[low,i-1]與[i+1,high],進行遞迴呼叫

quicksort(arrs, low, i - 1);

quicksort(arrs, i + 1, high);

}}

2.2總結:

快速排序的**比較符合正常邏輯,雖然是遞迴呼叫,但是仍然比較容易理解,分治遞迴求解子問題

快速排序的主要特點:比較脆弱,內迴圈比較短小,實際中效能較優越,只需要使用乙個很小的輔助棧。

PHP 快速排序演算法詳解

其實快速排序之所以稱之快速,就是因為,氣泡排序是每次對比只交換相鄰的兩個值的位置,這樣每個值要移動到它最終的排序結果中所對應的位置,可能需要很多次位置的變化。但是快速排序可在一次劃分中,就確定你選定的那個對比值在最終排序好的佇列中的位置。概念 快速排序演算法是對冒泡演算法的乙個優化。他的思想是先對陣...

快速排序演算法原理詳解

快速排序演算法是氣泡排序演算法的一種改進,採用 分而治之 的思想,把大的拆分成小的,再把小的拆分成更小的。如 對於一組待排的記錄,通過一趟排序後,將原序列分成兩部分,其中前一部分的所有記錄均比後一部分的所有記錄小,然後再依次對前後兩部分的記錄進行快速排序,遞迴該過程,直到序列中的所有記錄均有序為止。...

python的快速排序演算法詳解

def quick sort arr if len arr 2 當資料集長度為1時,結束遞迴 return arr mid arr len arr 2 基準數可以隨便選,我這裡就對2取整了 left,right 申明兩個列表用來儲存左右分區的數 arr.remove mid 將基準數從陣列中移除 f...