面試官愛問的10大經(jīng)典排序算法,20 張圖來搞定
時(shí)間:2021-08-19 16:25:07
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]冒泡排序簡介冒泡排序是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換以升序或降序的方式慢慢浮到數(shù)列的頂端,就如同碳酸飲料中二氧化碳的氣泡最終會(huì)上浮到頂端一樣,故名冒泡排序。復(fù)雜度與穩(wěn)定性思路原理以順序?yàn)槔龔牡谝粋€(gè)元素開始一個(gè)一個(gè)的比較相鄰的元素,如果第一個(gè)比第二個(gè)大即a[1]>a[2],就彼此交換。從...
冒泡排序
簡介
冒泡排序是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換以升序或降序的方式慢慢浮
到數(shù)列的頂端,就如同碳酸飲料中二氧化碳的氣泡最終會(huì)上浮到頂端一樣,故名冒泡排序。復(fù)雜度與穩(wěn)定性
思路原理
以順序?yàn)槔?/p>- 從第一個(gè)元素開始一個(gè)一個(gè)的比較相鄰的元素,如果第一個(gè)比第二個(gè)大即
a[1]>a[2]
,就彼此交換。 - 從第一對到最后一對,對每一對相鄰元素做一樣的操作。此時(shí)在最后的元素應(yīng)該會(huì)是最大的數(shù),我們也稱呼
一遍這樣的操作
為一趟冒泡排序。 - 針對所有的元素重復(fù)以上的步驟,每一趟得到的最大值已放在最后,下一次操作則不需要將此最大值納入計(jì)算。
- 持續(xù)對每次對越來越少的元素,重復(fù)上面的步驟。
- 直到所有的數(shù)字都比較完成符合
a[i],即完成冒泡排序。
圖示過程
以數(shù)組數(shù)據(jù){ 70,50,30,20,10,70,40,60}為例:如圖,每一次排序把一個(gè)最大的數(shù)被放在了最后,然后按照這個(gè)趨勢逐漸往前,直到按從小到大的順序依次排序。到了第4輪的時(shí)候,整個(gè)數(shù)據(jù)已經(jīng)排序結(jié)束了,但此時(shí)程序仍然在進(jìn)行。直到第5,6,7輪程序才算真正的結(jié)束,這其實(shí)是一種浪費(fèi)算力的表現(xiàn)。主要代碼實(shí)現(xiàn)
void?bubble_sort(int?a[],int?n)?{
????for(int?i=0;?i????????for(int?j=0;?j????????????if(a[j]>a[j 1])?{
????????????????swap(a[j],a[j 1]);??//交換數(shù)據(jù)
????????????}
????????}
????}
}
注意,由于C 的namespace std
命名空間的使用,std自帶了交換函數(shù)swap(a,b)
,可以直接使用,其功能是交換a與b的兩個(gè)值,當(dāng)然你可以自定義swap函數(shù),其模板代碼為:template????????//模板類,可以讓參數(shù)為任意類型
void?swap(T?