氣泡排序演算法(九)

2021-08-06 03:46:53 字數 2032 閱讀 5857

氣泡排序是通過交換相鄰資料來達到排序目的。

排序有按從小到大排序,也有按從大到小來排序。

假設有一組資料,個數為n:

10 6 8 5 12

現在要用用氣泡排序從小到大排序,怎麼排?

第一步:我先從後面開始比較,5和12比較不交換,8和5比較交換,5被換到了第三位,然後6和5比較交換,5被換到了第二位,最後10和5比較交換,5被換到了第一位,一共比較了n-1次,交換後的順序為:

5 10 6 8 12

第二步:還是一樣從後面開始比較,8和12比較不交換,6和8比較不交換,10和6比較交換,6被換到了第二位,5和6比較不交換,一共比較了n-1次,交換後的順序為:

5 6 10 8 12

第三步:還是一樣從後面開始比較,8和12比較不交換,10和8比較交換,8被換到了第三位,6和8比較不交換,5和6比較不交換,一共比較了n-1次,交換後的順序為:

5 6 8 10 12

正常情況下,還得進行一次排序,也就是n-1次排序,但是這裡在第三步就已經排完了,所以這裡就有必要判斷一下是否在中間排序就已經排好了,此時退出排序就不用浪費時間去進行n-1次排序,提高執行效率。

冒泡冒泡最大或者最小的泡泡先冒起來,用上面的例子來說;

第一步把最小的5冒出來了,第二步把第二小的6給冒出來了,第三步就冒完了,這是特殊情況。

如果是按從大到小排序,也是一樣的,就不解釋了。

【從小到大排序】

for (i = 0; i < len - 1; i++)//6個數最多進行5次排序

}

外層迴圈控制排序的次數,內層迴圈進行比較,進行交換,從小到大排序。

【從大到小排序】

for (i = 0; i < len - 1; i++)//6個數最多進行5次排序

}

【判斷是否提前完成排序,提高效率】

//如果排序在中間完成,就退出程式

for (k=0;k

判斷排序是否提前完成,也就是每排一次序,就依次比較,符合比較條件就加1,如果是按預定的順序排列,那麼統計次數等於n-1,也就是說排好序了,可以退出了。

#注意:下面的**用了動態陣列,目的是為了從鍵盤輸入數字代表陣列長度。

【**示例】

/*程式說明:**經過改進,可以進行從小到大排序,也可以進行從大到小排序,還有就是排序在中間已經完成,就不進行排序了*/

#include #include #include //#define size 20

void bubblesort(int *a,int len)

} printf("第%d步排序結果為:",i+1);

num = 0;

//依次輸出排序結果

for (k=0;ki; j--)

}printf("第%d步排序結果為:", i + 1);

for (k = 0; ka[k + 1])

}if (num == len - 1)

}}void main()

{ using namespace std;

//const int size=10;

int size;

cout << "請輸入待排序數字的個數:";

cin >> size;

int *shuzu = new int [size];//動態陣列,size可以不為常量,直接輸入

int *shuzu2 = new int[size];

srand(time(null));//產生隨機數種子

for (int i=0;i

【演示結果】

氣泡排序演算法 C 氣泡排序演算法排序詳解

氣泡排序是最簡單的排序方法,理解起來容易。雖然它的計算步驟比較多,不是最快的,但它是最基本的,初學者一定要掌握。c 氣泡排序演算法的例項源 一些排序方法的 集錦,該函式模板使用冒泡法對集合元素進行排序,引數說明 collection 集合物件,集合物件必須提供 操作。element 集合元素,該引數...

氣泡排序 氣泡排序演算法優化

常用的排序演算法主要包括 1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 簡單選擇排序 堆排序快速排序 4 歸併排序其中,氣泡排序算是最簡單的一種排序演算法 public class bubble int temp 0 for int i 0 iarr j 1 ...

排序演算法 氣泡排序

一.氣泡排序的過程 公升值排序 1.將第乙個記錄的關鍵字與第二個記錄的關鍵字進行比較,若key 1 key 2 則交換。然後比較第二個與第三個,依此類推,直到第n 1個與第n個比較為止,第一趟排序完後,記錄最大的關鍵字會被排在最後面。2.將記錄的前n 1個關鍵字進行第二趟比較交換,直到前n 1個中最...