快速排序(Quick Sort O nlgn

2021-08-21 15:59:45 字數 1421 閱讀 1856

以10個整型元素的陣列arr表示:int arr[10] = ;0

1234

5678

9351

4298

6710

第一行字型為紅色的表示元素索引,第二行字型為黑色的表示元素的數值。01

2345

6789

3

1

542

9867

10012

3456

7893

1

2

4598

67100

1234

5678

92

1

3

4598

67100

1234

5678

9213

4598

6710

0123

4567

89213

4598

6710left = right = 0  直接返回,不用排序了

快速排序是平均上的快,不是每個排序用這個演算法解決都是最快的,就更別說某些情況下還不好使用快速排序這個演算法。比如乙個比較大的,還近乎有序的陣列使用快速排序, 那麼程式迭代的次數就近乎等於元素的個數了(複雜度退化為o(n^2)),棧不溢位才怪,想想都可怕。。。但如果選擇插入排序,那麼插入排序的演算法複雜度可以降到o(nlogn)級別,可以說很快了。

為了不讓這種近乎有序的陣列選出的基準值分成的兩部分太不平衡的情況出現,我們可以隨機選擇個基準值。即在元素中隨機選擇乙個數值,然後再讓這個數值與第乙個數值交換,但基準值還是選擇的是第乙個元素。其它**不變,這樣相對的可以優化很多。

還有種情況,當陣列中的重複元素過多,也會出現分開的兩個陣列太不平衡的情況,這時候我們可以用雙路快速排序法進行優化,具體看:

(雙路快速排序演算法)

(三路快速排序演算法,對於重複元素較多的更優)

遞迴 快速排序 快速排序

問題描述 用遞迴來實現快速排序 quick sort 演算法。快速排序演算法的基本思路是 假設要對乙個陣列a進行排序,且a 0 x。首先對陣列中的元素進行調整,使x放在正確的位置上。同時,所有比x小的數都位於它的左邊,所有比x大的數都位於它的右邊。然後對於左 右兩段區域,遞迴地呼叫快速排序演算法來進...

排序 快速排序

快速排序時實踐中最快的一直排序,平均時間是0 nlogn 最壞的情況是o n2 但是很容易將這種情況避免 空間複雜度 o n lgn 不穩定。快速排序時基於分治模式處理的,對乙個典型子陣列a p.r 排序的分治過程為三個步驟 1.分解 a p.r 被劃分為倆個 可能空 的子陣列a p q 1 和a ...

排序 快速排序

定義 在快速排序演算法中,使用了分治策略,將要排序的序列分成兩個子串行,然後遞迴地對子序列進行排序,直到整個序列排序完畢。步驟 1.在序列中選擇乙個關鍵元素作為軸 2.對序列進行重新排序,將比軸小的元素移到軸的前邊,比軸大的元素移動到軸的後面。在進行劃分之後,軸便在它最終的位置上 3.遞迴地對兩個子...