插入 選擇 冒泡 梳排序效能比較

2022-05-02 14:36:15 字數 3673 閱讀 8645

雖然標題中的排序演算法往往被認為是低效率的演算法.但並不意味著這些演算法完全沒有可取之處。本次不再**這些演算法的基本原理,僅僅比較演算法的效能,並貼出實現這些演算法的源**:

還是先肝**吧(手動狗頭):

# include"

iostream

"# include

"vector

"# include

"ctime

"# include

"cstdlib

"using

namespace

std;

void insert_sort(vector &);

void choosesort(vector &);

void bubblesort(vector &);

void combsort(vector &);

intmain()

//}//採用隨機數生成法。

srand((unsigned)time(null));//

根據時鐘生成不同的種子,保證每次執行程式產生不同的隨機數

for (int i = 1; i <= max_number; i++)

//cout << "the initial order: "; 資料量太大,不適合輸出

//vector::iterator ia = a.begin();

//for (; ia != a.end(); ia++)

//

//cout << endl;

vectorb(a);

vector

c(a);

vector

d(a);

//show the initial order of the vector

//cout << "the initial order before sorting : ";

//vector::iterator ia = a.begin();

//for (; ia != a.end(); ia++)

//

//cout << endl;

//插入排序測試

clock_t start, finish;

double

runtime;

start =clock();

insert_sort(a);

finish =clock();

runtime = (double)(finish - start) /clocks_per_sec;

cout

<< "

the time of insert sort algorithm is:

"<< runtime << "s"

start =clock();

choosesort(b);

finish =clock();

runtime = (double)(finish - start) /clocks_per_sec;

cout

<< "

the time of choose sort algorithm is:

"<< runtime << "s"

start =clock();

bubblesort(c);

finish =clock();

runtime = (double)(finish - start) /clocks_per_sec;

cout

<< "

the time of bubble sort algorithm is:

"<< runtime << "s"

start =clock();

combsort(d);

finish =clock();

runtime = (double)(finish - start) /clocks_per_sec;

cout

<< "

the time of comb sort algorithm is:

"<< runtime << "s"

//vector::iterator id = d.begin();

//for (; id != d.end(); id++)

//

//cout << endl;

system(

"pause");

return0;

}//插入排序

void insert_sort( vector & sort_a) ///

注意,採用vector

是可以作為引數進行傳遞的,那麼是否可以作為返回型別使用呢?

sort_a[j] =temp;

}//return sort_a;

//說明可以將vector本身作為函式的返回值使用,但是需要清楚的是:返回的時候,記憶體實際上發生了區域性變數複製,所以是否考慮返回引用???}//

選擇排序

void choosesort(vector &sort_a)

}//sort_a[i] = minnum;

//用於交換,但是本身自帶的函式可以實現

//sort_a[loc] = temp;

if (i !=loc)

}}//

氣泡排序

void bubblesort(vector &sort_a)

}}//

梳排序void combsort(vector &sort_a)}}

}

補充:由於之前對梳排序未做任何的說明,在此簡要的說明一下梳排序:梳排序的本質仍然是氣泡排序,差異在於,梳排序的冒泡物件並不是相鄰元素,而是距離為step的元素,而step是乙個變數(右大變小),即「梳子」間隙逐漸變小。而梳排序迭代的終止條件是:當step變成1,即退化為傳統的冒泡後,執行一次,則得到正確的順序。

在此,我們給出上述四種排序的測試結果:

不同排序演算法效能比較

5000

10000

15000

20000

插入0.839s

3.427

7.716s

13.648s

選擇0.667s

2.276

5.321s

9.208s

冒泡2.320s

9.177

20.823s

36.542s

梳0.016s

0.042

0.057s

0.079s

上述**中的(5000,10000,....表示資料規模,程式中隨機生成的隨機數,我們可以看到,測試結果表明:按照速度而言,演算法的時間效能上:梳》選擇》插入》冒泡(>表示優於);(冒泡辣雞實錘(開個玩笑)),即演算法效能上,梳排序的效能要遠遠高於其他的方式。我們通過觀察演算法執行時間,梳狀排序時間複雜度並不是o(n2),似乎比這個時間複雜度要低,實際上也的確如此。而對於插入,選擇,冒泡而言,儘管時間複雜度都是o(n2),但是畢竟還是有所差異,當資料更莫更大的時候,這種差異將會更加明顯,但是無疑,氣泡排序時間複雜度真的高,氣泡排序的最好,最差,平均時間複雜度都是相同的,都是o(n2)。

疑問:在學習梳排序的時候,見有描述稱其為不穩定的演算法,不知為何不穩定,望高手能予指點,謝謝!!

冒泡 插入 選擇排序效能分析

外層迴圈記錄 冒泡 到後面的數字個數,內層迴圈負責 選出 本次冒泡中最大的數 從小到大排序 相鄰比較,逆序交換。public static void bubble int a public static void swap int a,int a,int b 外層迴圈記錄當前要排序外接的索引,內層迴...

冒泡,插入,選擇排序

經典的排序演算法,此文章介紹三個 氣泡排序 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。public void bubblesort int a while iswrap for int ...

冒泡 插入 選擇 快速排序

各位親 有時間可以去看看我的 金駿家居 店 買時說明在我的部落格看到有優惠哦 還有意外禮品贈送 真正的程式設計師 店 氣泡排序 每次找出最大或者最小的數放到序列的最後。插入排序 每一次查詢都把數放到已排序序列合適的位置。例子 4,3,2,1如數中的第乙個數肯定是有序的,從第二個數開始3小於4,放在已...