冒泡,快速,和堆排序

2022-09-07 02:09:16 字數 2446 閱讀 1434

1

//主程式 (.cpp檔案)

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include "

bobblesort.h

"8 #include "

quicksort.h

"9 #include "

heapsort.h"10

11int

main()

1255

getch();

56return0;

57}5859

//********************************* bobblesort.**件

60void bobblesort(int a,int n) //

氣泡排序的演算法

6177}78

}7980//

************************************* quicksort.**件

81int partion(int a,int low,int high) //

找出分割位置

8292 a[low]=key;

93return

low;94}

95void quicksort(int a,int low,int

high)

96104

else

return

;105

}106

107//

***************************************** heapsort.h 檔案

108void swap(int &a,int &b)

109114

void heapify(int a,int k,int m) //

整理堆115

125else

if((a[k1]a[k])||(a[k2]>a[k]&&a[k]>a[k1]))

126130

}131

else

if(k1<=m)

132138

}139

else

return

;140

}141

void heapsort(int a,int

m)142

151 }

view code

**自:

排序問題可以參考:

一  問題描述

對乙個較大規模的陣列進行排序,分別使用冒泡,快速,和堆排序,比較這三種方法的效率.

二  演算法分析與設計

氣泡排序的時間複雜度為:    t(n) = o(n^2)

快速排序的時間複雜度為:    t(n) = o(n*log n)  (前面的報告中已經有分析說明)

堆 排序的時間複雜度為  :    t(n) = o(n*log n)   ( 在最壞的情況下)

堆排序的執行時間主要是耗費在建立初始堆和調整建立新堆的反覆篩選上面,在建立初始堆的時候,需要的時間是0(n);因為在建初始堆的時候,呼叫heapify() n/2次,有heapify()所需要的時間可知道,當i在n/2的到n/4+1的範圍內時,每次呼叫耗費時間為c,c為一常數,當i在n/4到n/8+1的範圍內時,耗費的時間為2c,………。所以

c(n/4+2*n/8+3*n/16+……..)=o(n)

在調整堆的時候,呼叫heapify共n-1次,每次呼叫所需要的時間為o(n)的時間,所以整個演算法在最壞的情況下只需要:t(n) = o(n*log n) 的時間。

四   執行結果和分析

1)當陣列的規模都為10000個元素的時候:

氣泡排序所需的時間是:0.625秒;快速排序和堆排序基本上不需要時間(因為規模比較小所以看不出來)。

2)當陣列的規模都為100000個元素的時候:

氣泡排序所需要的時間為:69.875秒;

快速排序所需要的時間為:0.047 秒;

堆 排序所需要的時間為:0.031 秒;

從上面的比較不難看出堆排序要比快速好,快速又要比氣泡排序好。但這時候堆排序和快速排序所花的時間相差不時很多。

3)當陣列規模為1000000個元素的時候:

這主要是比較快速排序和堆排序之間的差距,因為當規模這麼大時,氣泡排序要花太多時間所以就沒有進行比較測試。從結果中可以看到,當陣列規模很大的時候,堆排序的優勢就徹底的體現出來了,比快速排序要塊很多。所以證明了一點,當陣列元素很大的時候,用堆排序時最優的。

Python氣泡排序 快速排序 堆排序

氣泡排序 def bubble sort array,n for i in range n for j in range 1 n i if array j 1 array j array j 1 array j array j array j 1 快速排序 def quick sort array,...

氣泡排序,快速排序,堆排序,歸併排序

1.氣泡排序 1 基本思想 從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大 最小 的資料元素交換到了無序序列的隊尾,從而成為有序序列的一部分 下一次繼續這個過程,直到所有資料元素都排好序。演算法的核心在於 每次通過兩兩比較交換位置。選出剩餘無序序列裡最大 最小 的資料元素放到隊尾...

氣泡排序,選擇排序,快速排序,堆排序詳解

選擇排序,堆排序,快速排序都是不穩定的排序演算法。a,氣泡排序 氣泡排序 每次將相鄰兩個數比較,如果不滿足排序條件則交換位置 比較次數 k n 1 k 1 2 n n 1 時間複雜度 o n public class bubblesort 一趟完畢後,從第乙個元素開始,每相鄰兩個元素,前乙個元素小於...