面試官愛問的10大經(jīng)典排序算法,20 張圖來搞定
時間:2021-08-19 16:25:07
手機看文章
掃描二維碼
隨時隨地手機看文章
[導(dǎo)讀]冒泡排序簡介冒泡排序是因為越小的元素會經(jīng)由交換以升序或降序的方式慢慢浮到數(shù)列的頂端,就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名冒泡排序。復(fù)雜度與穩(wěn)定性思路原理以順序為例從第一個元素開始一個一個的比較相鄰的元素,如果第一個比第二個大即a[1]>a[2],就彼此交換。從...
冒泡排序
簡介
冒泡排序是因為越小的元素會經(jīng)由交換以升序或降序的方式慢慢浮
到數(shù)列的頂端,就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名冒泡排序。復(fù)雜度與穩(wěn)定性
思路原理
以順序為例- 從第一個元素開始一個一個的比較相鄰的元素,如果第一個比第二個大即
a[1]>a[2]
,就彼此交換。 - 從第一對到最后一對,對每一對相鄰元素做一樣的操作。此時在最后的元素應(yīng)該會是最大的數(shù),我們也稱呼
一遍這樣的操作
為一趟冒泡排序。 - 針對所有的元素重復(fù)以上的步驟,每一趟得到的最大值已放在最后,下一次操作則不需要將此最大值納入計算。
- 持續(xù)對每次對越來越少的元素,重復(fù)上面的步驟。
- 直到所有的數(shù)字都比較完成符合
a[i],即完成冒泡排序。
圖示過程
以數(shù)組數(shù)據(jù){ 70,50,30,20,10,70,40,60}為例:主要代碼實現(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的兩個值,當(dāng)然你可以自定義swap函數(shù),其模板代碼為:template????????//模板類,可以讓參數(shù)為任意類型
void?swap(T?