當(dāng)前位置:首頁 > 公眾號(hào)精選 > C語言與CPP編程
[導(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>
  1. 從第一個(gè)元素開始一個(gè)一個(gè)的比較相鄰的元素,如果第一個(gè)比第二個(gè)大即a[1]>a[2],就彼此交換。

  2. 從第一對到最后一對,對每一對相鄰元素做一樣的操作。此時(shí)在最后的元素應(yīng)該會(huì)是最大的數(shù),我們也稱呼一遍這樣的操作一趟冒泡排序。

  3. 針對所有的元素重復(fù)以上的步驟,每一趟得到的最大值已放在最后,下一次操作則不需要將此最大值納入計(jì)算。

  4. 持續(xù)對每次對越來越少的元素,重復(fù)上面的步驟。

  5. 直到所有的數(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?
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉