05快速排序

2021-07-03 04:50:29 字數 792 閱讀 9512

快速排序是實踐中已知的最快的排序演算法,他的平均執行時間為o(n logn), 最壞情形的效能為o(n^2)。

一:選取樞紐元的幾種方法

1:糟糕的方法:通常的做法是選擇陣列中第乙個元素作為樞紐元,如果輸入是隨機的,那麼這是可以接受的。但是,如果輸入序列是預排序的或者是反序的,那麼依據這樣的樞紐元進行劃分則會出現相當糟糕的情況,因為可能所有的元素不是被劃入s1,就是都被劃入s2中。

2:較好的方法:乙個比較好的做法是隨機選取樞紐元,一般來說,這種策略是比較妥當的。

3:三數取中值方法,例如,輸入序列為 8, 1, 4, 9, 6, 3, 5, 2, 7, 0 ,它的左邊元素為8,右邊元素為0,中間位置|_left+right)/2_|上的元素為6,於是樞紐元為6.顯然,使用三數中值分割法消除了預排序輸入的壞情形。

二:細節

1、我們要考慮一下,就是如何處理那些等於樞紐元的元素,問題在於當i遇到第乙個等於樞紐元的關鍵字時,是否應該停止移動i,或者當j遇到乙個等於樞紐元的元素時是否應該停止移動j。

答案是:如果i,j遇到等於樞紐元的元素,那麼我們就讓i和j都停止移動。

2、對於很小的陣列,如陣列的大小n<=20時,快速排序不如插入排序好。

三:**:

//三數取中分割法

input_type median3( input_type  a,  int left,  int  right)     

05 排序 快速排序

原理 整個過程其實只需三步 1.在一列陣列中,選擇其中乙個資料作為 基準 2.所有小於 基準 的資料,都移到 基準 的左邊,所有大於 基準 的資料,都移到 基準 的右邊。3.對於 基準 左邊和右邊的兩個子集,不斷重複第一步和第二步。直到所有的資料子集只剩下乙個資料為止。用例 現有一組資料如下 8 2...

05 選擇排序

選擇排序演算法的原理 選擇排序是從氣泡排序演化而來的,每一輪 趟 比較出最小的那個值,放到第乙個位置,然後在每輪的無序區中選出最小的值放到第二個位置。目的 從小到大排序 圖示 演算法的關鍵點是 有序區跟無序區 無序區最小的位置 首先我們寫乙個簡單的選擇排序,用到python的內建模組 思路是我們建立...

day05 插入,歸併,快速,選擇排序演算法總結

前面幾天在學習基礎的排序演算法,從o n 級別到o n 級別的演算法,今天就不學習新的排序演算法了,停下來把之前學習的進行鞏固一下,並且好好分析一下這幾種演算法之間的區別,以及他們分別適用於什麼樣的情景。選擇排序的思想正如它的名字,重點就在選擇。怎麼個選擇法呢?選擇排序會從當前陣列中,每次選出乙個最...