排序演算法 氣泡排序

2022-08-23 03:00:19 字數 1955 閱讀 7278

一、介紹

氣泡排序(bubble sort),又被稱為氣泡排序或泡沫排序。

它是一種較簡單的排序演算法。它會遍歷若干次要排序的數列,每次遍歷時,它都會從前往後依次的比較相鄰兩個數的大小;如果前者比後者大,則交換它們的位置。這樣,一次遍歷之後,最大的元素就在數列的末尾! 採用相同的方法再次遍歷時,第二大的元素就被排列在最大元素之前。重複此操作,直到整個數列都有序為止!

二、**說明

下面以數列為例,演示它的氣泡排序過程(如下圖)。

我們先分析第1趟排序

當i=5,j=0時,a[0]a[2]。此時,交換a[1]和a[2]的值;交換之後,a[1]=30,a[2]=40。

當i=5,j=2時,a[2]>a[3]。此時,交換a[2]和a[3]的值;交換之後,a[2]=10,a[3]=40。

當i=5,j=3時,a[3]a[5]。此時,交換a[4]和a[5]的值;交換之後,a[4]=50,a[3]=60。

於是,第1趟排序完之後,數列變成了。此時,數列末尾的值最大。

根據這種方法:

第2趟排序完之後,數列中a[5...6]是有序的。

第3趟排序完之後,數列中a[4...6]是有序的。

第4趟排序完之後,數列中a[3...6]是有序的。

第5趟排序完之後,數列中a[1...6]是有序的。

第5趟排序之後,整個數列也就是有序的了。

三、氣泡排序時間複雜度和穩定性

氣泡排序時間複雜度

氣泡排序的時間複雜度是o(n2)。

假設被排序的數列中有n個數。遍歷一趟的時間複雜度是o(n),需要遍歷多少次呢?n-1次!因此,氣泡排序的時間複雜度是o(n2)。

氣泡排序穩定性

氣泡排序是穩定的演算法,它滿足穩定演算法的定義。

演算法穩定性 -- 假設在數列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;並且排序之後,a[i]仍然在a[j]前面。則這個排序演算法是穩定的!

四、**

#include using

namespace

std;

/** 氣泡排序

* * 引數說明:

* a -- 待排序的陣列

* n -- 陣列的長度 */

void bubblesort1(int* a, int

n) }

}}/*

* 氣泡排序(改進版)

* * 引數說明:

* a -- 待排序的陣列

* n -- 陣列的長度 */

void bubblesort2(int* a, int

n) }

if (flag==0

)

break; //

若沒發生交換,則說明數列已有序。}}

intmain()

;

int ilen = (sizeof(a)) / (sizeof(a[0

]));

cout

<< "

before sort:";

for (i=0; i)

cout

<< a[i] << "";

cout

<

bubblesort1(a, ilen);

//bubblesort2(a, ilen);

cout

<< "

after sort:";

for (i=0; i)

cout

<< a[i] << "";

cout

<

return0;

}

排序演算法 氣泡排序

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

排序演算法 氣泡排序

從基礎重新抓起。氣泡排序 每次從陣列頭到尾選出最大或者最小的,排到尾部或者頭部。以排序結果從小到大為例 每次從陣列中把最大的調換到末尾。eg.元素個數 count,需要找count 1次 外迴圈,最後一次不用再做比較了 每次從頭到末尾沒有確定的資料中找最大的 內迴圈 做法就是比較相鄰兩個元素的大小,...

排序演算法 氣泡排序

排序演算法是處理資料最基礎的演算法,掌握各種排序演算法有利以後遇到資料時的處理。首次學習,先學習氣泡排序。氣泡排序原理 對一組待排序資料x1,x2,x3,x4,x5,x6,x7.xn,氣泡排序演算法指標 這裡的指標並不是實際的指標,只是為方便而假象的乙個類似指標的東西 從第乙個資料開始,與其後面的乙...