對序列1,2,3,4,5進行排序,用堆排序快速排序氣泡排序

2021-03-04 01:58:36 字數 5117 閱讀 7202

1樓:

1、插入排序

(直接插入排序和希爾排序)

2、選擇排序(直接選擇排序和堆排序)

3、交換排序(氣泡排序和快速排序)

4、歸併排序

5、基數排序

直接插入排序:逐個將後乙個數加到前面的排好的序中。在直接插入排序過程中,對其中乙個記錄的插入排序稱為一次排序;直接插入排序是從第二個記錄開始進行的,因此,長度為n的記錄序列需要進行n-1次排序才能完成整個序列的排序。

時間複雜度為o(n2)。

希爾排序:希爾排序又稱縮小增量排序,增量di可以有各種不同的取法,但最後一次排序時的增量必須為1,最簡單可取di+1=di/2(取小)。時間複雜度為o(n(log2n)2)。

直接選擇排序

說明:每次將後面的最小的找出來插入前面的已排好的序中。同理,具有n個記錄的序列要做n-1次排序。

時間複雜度為o(n2)。

氣泡排序:兩個兩個比較,將大的往後移。通過第一次氣泡排序,使得待排序的n個記錄中關鍵字最大的記錄排到了序列的最後乙個位置上。

然後對序列中前n-1個記錄進行第二次氣泡排序。。。對於n個記錄的序列,共需進行n次氣泡排序。時間複雜度為o(n2)。

快速排序:又叫分割槽交換排序,是對氣泡排序方法的一種改進。時間複雜度為o(nlog2n)。

歸併排序:將兩個或兩個以上的有序資料序列合併成乙個有序資料序列的過程。時間複雜度為o(nlog2n)。

選擇排序,快速排序,氣泡排序,堆排序,插入排序,基排序的程式的執行速度

2樓:匿名使用者

分析如下:62616964757a686964616fe59b9ee7ad9431333262383566

氣泡排序:在最優情況下只需要經過n-1次比較即可得出結果,(這個最優情況那就是序列己是正序,從100k的正序結果可以看出結果正是如此),但在最壞情況下,即倒序(或乙個較小值在最後),下沉演算法將需要n(n-1)/2次比較。所以一般情況下,特別是在逆序時,它很不理想。

它是對資料有序性非常敏感的排序演算法。

氣泡排序2:它是氣泡排序的改良(一次下沉再一次上浮),最優情況和最壞情況與氣泡排序差不多,但是一般情況下它要好過氣泡排序,它一次下沉,再一次上浮,這樣避免了因乙個數的逆序,而造成巨大的比較。如(2,3,4,…,n-1,n,1),用氣泡排序需要n(n-1)/2次比較,而此排序只要3輪,共比較(n-1)+(n-2)+(n-3)次,第一輪1將上移一位,第二輪1將移到首位,第三輪將發現無資料交換,序列有序而結束。

但它同樣是乙個對資料有序性非常敏感的排序演算法,只適合於資料基本有序的排序。

快速排序:它同樣是氣泡排序的改進,它通過一次交換能消除多個逆序,這樣可以減少逆序時所消耗的掃瞄和資料交換次數。在最優情況下,它的排序時間複雜度為o(nlog2n)。

即每次劃分序列時,能均勻分成兩個子串。但最差情況下它的時間複雜度將是o(n^2)。即每次劃分子串時,一串為空,另一串為m-1(程式中的100k正序和逆序就正是這樣,如果程式中採用每次取序列中部資料作為劃分點,那將在正序和逆時達到最優)。

從100k中正序的結果上看「快速排序」會比「氣泡排序」更慢,這主要是「氣泡排序」中採用了提前結束排序的方法。有的書上這解釋「快速排序」,在理論上講,如果每次能均勻劃分序列,它將是最快的排序演算法,因此稱它作快速排序。雖然很難均勻劃分序列,但就平均效能而言,它仍是基於關鍵字比較的內部排序演算法中速度最快者。

直接選擇排序:簡單的選擇排序,它的比較次數一定:n(n-1)/2。

也因此無論在序列何種情況下,它都不會有優秀的表現(從上100k的正序和反序資料可以發現它耗時相差不多,相差的只是資料移動時間),可見對資料的有序性不敏感。它雖然比較次數多,但它的資料交換量卻很少。所以我們將發現它在一般情況下將快於氣泡排序。

堆排序:由於它在直接選擇排序的基礎上利用了比較結果形成。效率提高很大。

它完成排序的總比較次數為o(nlog2n)。它是對資料的有序性不敏感的一種演算法。但堆排序將需要做兩個步驟:

-是建堆,二是排序(調整堆)。所以一般在小規模的序列中不合適,但對於較大的序列,將表現出優越的效能。

直接插入排序:簡單的插入排序,每次比較後最多移掉乙個逆序,因此與氣泡排序的效率相同。但它在速度上還是要高點,這是因為在氣泡排序下是進行值交換,而在插入排序下是值移動,所以直接插入排序將要優於氣泡排序。

直接插入法也是一種對資料的有序性非常敏感的一種演算法。在有序情況下只需要經過n-1次比較,在最壞情況下,將需要n(n-1)/2次比較。

希爾排序:增量的選擇將影響希爾排序的效率。但是無論怎樣選擇增量,最後一定要使增量為1,進行一次直接插入排序。

但它相對於直接插入排序,由於在子表中每進行一次比較,就可能移去整個經性表中的多個逆序,從而改善了整個排序效能。希爾排序算是一種基於插入排序的演算法,所以對資料有序敏感。

歸併排序:歸併排序是一種非就地排序,將需要與待排序序列一樣多的輔助空間。在使用它對兩個己有序的序列歸併,將有無比的優勢。

其時間複雜度無論是在最好情況下還是在最壞情況下均是o(nlog2n)。對資料的有序性不敏感。若資料節點資料量大,那將不適合。

但可改造成索引操作,效果將非常出色。

基數排序:在程式中採用的是以數值的十進位制位分解,然後對空間採用一次性分配,因此它需要較多的輔助空間(10*n+10), (但我們可以進行其它分解,如以乙個位元組分解,空間採用連結串列將只需輔助空間n+256)。基數排序的時間是線性的(即o(n))。

由此可見,基數排序非常吸引人,但它也不是就地排序,若節點資料量大時宜改為索引排序。但基數排序有個前提,要關鍵字能象整型、字串這樣能分解,若是浮點型那就不行了。

按平均時間將排序分為類:

(1) 平方階(o(n2))排序

各類簡單排序,例如直接插入、直接選擇和氣泡排序;

(2) 線性對數階(o(nlog2n))排序

如快速排序、堆排序和歸併排序;

(3) o(n1+§))排序

§是介於0和1之間的常數。希爾排序便是一種;

(4) 線性階(o(n))排序

本程式中的基數排序,此外還有桶、箱排序。

排序方法的選擇

因為不同的排序方法適應不同的應用環境和要求,所以選擇合適的排序方法很重要

(1)若n較小,可採用直接插入或直接選擇排序。

當記錄規模較小時,直接插入排序較好,它會比選擇更少的比較次數;

但當記錄規模較大時,因為直接選擇移動的記錄數少於直接插人,所以宜用選直接選擇排序。

這兩種都是穩定排序演算法。

(2)若檔案初始狀態基本有序(指正序),則應選用直接插人、冒泡或隨機的快速排序為宜(這裡的隨機是指基準取值的隨機,原因見上的快速排序分析);這裡快速排序演算法將不穩定。

(3)若n較大,則應採用時間複雜度為o(nlog2n)的排序方法:快速排序、堆排序或歸併排序序。

快速排序是目前基於比較的內部排序中被認為是最好的方法,當待排序的關鍵字是隨機分布時,快速排序的平均時間最短;

堆排序雖不會出現快速排序可能出現的最壞情況。但它需要建堆的過程。這兩種排序都是不穩定的。

歸併排序是穩定的排序演算法,但它有一定數量的資料移動,所以我們可能過與插入排序組合,先獲得一定長度的序列,然後再合併,在效率上將有所提高。

(4)特殊的箱排序、基數排序

它們都是一種穩定的排序演算法,但有一定的侷限性:

1、關鍵字可分解。

2、記錄的關鍵字位數較少,如果密集更好

3、如果是數字時,最好是無符號的,否則將增加相應的對映複雜度,可先將其正負分開排序。

事實上各種排序方法個有優缺點適用於不同的場合:

排序(sorting)

插入排序(insertion sort):直接插入排序 希爾排序(shell's sort)(縮小增量排序diminishing increment sort)

交換排序:氣泡排序(bubble sort)快速排序(quick sort)

選擇排序:直接選擇排序(straight selection sort),堆排序;

歸併排序(merge sort):

分配排序:箱排序(bin sort),基數排序(radix sort)

更多的自己研究一下。

排序方法的選取主要考慮演算法的效能與資源佔用。也就是速度和佔用的儲存空間。

希望對你有所幫助!

3樓:

要看時間複雜度羅。

o(n^2),o(n^2),o(n^2),o(nlog 2 n),o(nlog 2 n),o(nlog 2 n),

在快速排序、堆排序、歸併排序中,什麼排序是穩定的?

4樓:匿名使用者

歸併排序是穩定的排序演算法。

歸併排序的穩定性分析:

歸併排序是把序列遞迴地分成短序列,遞迴出口是短序列只有1個元素或者2個序列,然後把各個有序的段序列合併成乙個有序的長序列,不斷合併直到原序列全部排好序。

可以發現,在1個或2個元素時,1個元素不會交換,2個元素如果大小相等,沒有外部干擾,將不會破壞穩定性。

那麼,在短的有序序列合併的過程中,穩定性是沒有受到破壞的,合併過程中如果兩個當前元素相等時,把處在前面的序列的元素儲存在結果序列的前面,這樣就保證了穩定性。所以,歸併排序也是穩定的排序演算法。

5樓:匿名使用者

歸併排序是穩定的

「快速排序和堆排序都不穩定

不穩定:就是大小相同的兩個數,經過排序後,最終位置與初始位置交換了。

快速排序:

27 23 27 3

以第乙個27作為pivot中心點,則27與後面那個3交換,形成

3 23 27 27,排序經過一次結束,但最後那個27在排序之初先於初始位置3那個27,所以不穩定。

堆排序:

比如:3 27 36 27,

如果堆頂3先輸出,則,第三層的27(最後乙個27)跑到堆頂,然後堆穩定,繼續輸出堆頂,是剛才那個27,這樣說明後面的27先於第二個位置的27輸出,不穩定。」

「2 歸併排序(mergesort)

歸併排序先分解要排序的序列,從1分成2,2分成4,依次分解,當分解到只有1個一組的時候,就可以排序這些分組,然後依次合併回原來的序列中,這樣就可以排序所有資料。合併排序比堆排序稍微快一點,但是需要比堆排序多一倍的記憶體空間,因為它需要乙個額外的陣列。」

參考資料

在插入排序希爾排序選擇排序快速排序堆排序歸併排序中

在插入排序 希爾排序 選擇排序 快速排序 堆排排序 歸併排序和基數排序中,平均比較次數最少的排序是快速排序,需要記憶體容量最多的是基數排序。時間複雜度 時間複雜度為 o nlogn 快速排序 堆排序和歸併排序 時間複雜度為 o n2 直接插入排序 起泡排序和 簡單選擇排序 時間複雜度為 o n 基數...

為什麼快速排序比堆排序快呢,為什麼快速排序在陣列的情況下比歸併排序快

因為推排抄中有大量無效的操作,比如將最末尾元素移動到堆首,必須要有後續操作再移動此時堆首的元素,這樣會增加資料的無序度 但是快排不一樣,快排沒有無用操作,每一次交換都會使資料更加有序。而且堆排是跳躍訪問,快排是區域性順序訪問,這兩者的速度實際上是不一樣的,當資料量增大差距就明顯了 一般情bai況下,...

初始狀態按鍵值遞增,分別用堆排序,快速排序和氣泡排序對其進行排序(按遞增順序)最省最費時排序?原因

1。確定的塊的完整集合,其中的資料塊內的一組完整的元素2。在氣泡排序演算法方回面的乙個標誌,答標誌設定記錄旅行對記錄進行排序交流,以確定當前的排序區域自然有序。氣泡排序時間最少的標題。當最初的記錄鍵的值遞增有序,快速排序,每個選定的中間元件是最小的,它被分成兩個區域是空的,比原來的面積?的至少一種元...