排序(四)之快速排序

2021-07-05 18:29:42 字數 832 閱讀 1409

快速排序法相交之前的三種排序法來講,是一種執行速度較快的排序演算法,也是一種大家經常使用的排序演算法。

快速排序法使用一種分治的思想,將待排陣列切分成兩個子陣列,將兩個子陣列進行獨自的排序。

快速排序法與歸併排序不同,歸併排序是將兩個有序的子陣列分別排序,然後將兩個子陣列歸併後形成乙個有序的陣列。而快速排序法則是將子陣列分別排序後直接就形成了乙個有序的陣列。還有乙個區別是歸併排序法是將待排陣列等分成兩份,而快速排序的切分位置取決於陣列本身。

上面的敘述可能有一些抽象,下面列出**,分析**過後應該會更容易理解。

**是用遞迴的方式實現的快速排序法,將陣列的第乙個元素作為切分元素。

切分函式

public int partition(int a , int lo , int hi)

exchange(a , lo , j );

return j;

}

排序函式

protected void sort(int a, int lo, int hi)

因為使用遞迴所以**量看上去很少,但是遞迴也相對於來說比較容易出錯。

快速排序的最好情況是每次都能講陣列平均分成兩部分,時間複雜度約為n*lgn;最壞的情況是每次切分後有乙個陣列是為空,這是比較次數就是n+(n-1)+(n-2)+....+1 = (n+1)n/2.

快速排序法的平均時間複雜度約為n*lgn.

遞迴演算法每次要儲存返回的資訊,需要附加額外的堆疊空間。快速排序法空間複雜度約為s(lgn).

由於在快速排序中相同元素的相對位置會發生改變,所以快速排序法是不穩定的。

排序 四 之快速排序

快速排序應該時排序演算法中最好的一種,看看它的命名都顯得那麼誠實。快速排序也是我們必須掌握的一種排序演算法,因為面試的時候絕大概率是要出現的。這裡假如資料array 10 進行排序 首先找個基準元素tmp,一般為第乙個資料 tmp array 0 left 0,rgint 9 從最右邊 right ...

排序之快速排序

快速排序的在內排中起到比較重要的作用,平均時間複雜度達到o nlogn 公升序快速排序 1 int partition vector vi,int start,int end 11 vi start key 12return start 13 14void quickcore vector vi,i...

排序之快速排序

有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方...