對歸併 堆排 快排的一些總結。

2021-06-04 13:28:09 字數 473 閱讀 9582

這三個演算法的理論時間複雜度都是nlogn,但是區別還是很大的。

這三個演算法裡,實際效率最低的是堆排序,因為在每次調整大根堆的時候,都把底層元素交換到了根,然後再調整,而底層元素又不可能大於原根元素的兩個孩子節點,因此非等概率調整,做了很多次無效交換,因此實際效率最低。

歸併排序時間效率最高,並且穩定,因為歸併排序每次都把序列二等分,做等概率劃分,最後繼續劃分,這樣就能達到最優劃分策略,即logn次劃分,每個元素最多進行logn次比較,n個元素也就是nlogn,並且在合併的時候不破壞現有順序,因此是穩定排序,但由於借助了logn個遞迴棧和n個臨時儲存空間,因此他的可適用性反而不如快排。

快排效率上是不如歸併的,而且不穩定,但是思想和歸併一樣,都是對序列不斷做劃分,然後排序,劃分策略未必就是最優劃分策略,但是可以讓他接近最優劃分策略,這就涉及到了乙個選擇樞紐元的問題,比較常見的方法是用三數中值法,並且由於是就地排序,不許靠考慮額外空間開銷,因此快排是綜合最好的排序演算法。

一些排序方法(堆排,歸併,快排,計數排)

感覺學校演算法課挺水的,不過程式設計這東西還是要靠自己想,自己琢磨,老師也只能幫你指引下。菜鳥我還是好好敲 吧。計數排序 其他排序方法都是依靠元素之間的比較從而產生次序,而計數排序是依靠元素計算,得出自己在序列中的位置 計數排序 設元素均為非負整數 include include using nam...

快排 歸併 堆排

快排 include include include includeusing namespace std void quicksort vector a,int l,int r 終止遞迴的條件,子串行長度為1 int mid low high low 2 取得序列中間的元素 mergesort a...

排序總結 快排 歸併 堆排

1.煞筆快排 假設我們對陣列進行快速排序。首先在這個序列中找乙個數作為基準數,為了方便可以取第乙個數。遍歷陣列,將小於基準數的放置於基準數左邊,大於基準數的放置於基準數右邊。此時得到類似於這種排序的陣列。在初始狀態下7是第乙個位置,現在需要把7挪到中間的某個位置k,也即k位置是兩邊數的分界點。那如何...