資料結構 排序 交換排序 氣泡排序法

2021-04-20 03:35:08 字數 1810 閱讀 8238

氣泡排序(bubble sorting)的基本思想是:設待排序n個元素存放在陣列a[n]中,無序區範圍初始為(a(0),a(1),a(2),...,a[n-1]),氣泡排序方法是在當前無序區內,從最上面的元素a[0]開始,對每兩個相鄰的元素a[i+1]和a[i](i=0,1,...,n-1)進行比較,且使值較小的元素換至值較大的元素之上(若a[i]>a[i+1],則a[i]和a[i+1]的值互換),這樣經過一趟氣泡排序後,假設最後下移的元素為a[k],則無序區中值較大的幾個元素到達下端並從小到大依次存放在a[k+1],a[k+2],...a[n-1]中,這樣無序區範圍變為(a[0],a[1],a[2],...,a[k])。在當前無序區內進行下一趟氣泡排序。這個過程一直到某一趟排序中不出現元素交換的動作,排序結束。整個排序過程最多執行n-1遍。這種排序方法是通過相鄰元素之間的比較與交換,使值較小的元素逐漸從後部移向前部(從下標較大的單元移向下標較小的單元),就象水底下的氣泡一樣逐漸向上冒。故稱為氣泡排序法。

1、排序方法

將被排序的記錄陣列r[1..n]垂直排列,每個記錄r[i]看作是重量為r[i].key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃瞄陣列r:凡掃瞄到違反本原則的輕氣泡,就使其向上"飄浮"。如此反覆進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。

(1)初始

r[1..n]為無序區。

(2)第一趟掃瞄

從無序區底部向上依次比較相鄰的兩個氣泡的重量,若發現輕者在下、重者在上,則交換二者的位置。即依次比較(r[n],r[n-1]),(r[n-1],r[n-2]),…,(r[2],r[1]);對於每對氣泡(r[j+1],r[j]),若r[j+1].key

(3)第二趟掃瞄

掃瞄r[2..n]。掃瞄完畢時,"次輕"的氣泡飄浮到r[2]的位置上……

最後,經過n-1 趟掃瞄可得到有序區r[1..n]

注意:第i趟掃瞄時,r[1..i-1]和r[i..n]分別為當前的有序區和無序區。掃瞄仍是從無序區底部向上直至該區頂部。掃瞄完畢時,該區中最輕氣泡飄浮到頂部位置r[i]上,結果是r[1..i]變為新的有序區。

2、氣泡排序過程示例

對關鍵字序列為49 38 65 97 76 13 27

49的檔案進行氣泡排序的過程【

參見動畫演示

3、排序演算法

(1)分析

因為每一趟排序都使有序區增加了乙個氣泡,在經過n-1趟排序之後,有序區中就有n-1個氣泡,而無序區中氣泡的重量總是大於等於有序區中氣泡的重量,所以整個氣泡排序過程至多需要進行n-1趟排序。

若在某一趟排序中未發現氣泡位置的交換,則說明待排序的無序區中所有氣泡均滿足輕者在上,重者在下的原則,因此,氣泡排序過程可在此趟排序後終止。為此,在下面給出的演算法中,引入乙個布林量exchange,在每趟排序開始前,先將其置為false。若排序過程中發生了交換,則將其置為true。各趟排序結束時檢查exchange,若未曾發生過交換則終止演算法,不再進行下一趟排序。

(2)具體演算法

using system;

using system.collections.generic;

using system.text;

namespace exebullitionsorter

}j++;}}

static void main(string args)

;ebullitionsorter e = new ebullitionsorter ();

e.sort(array);

foreach (int m in array)

console.writeline("", m); }

}}

資料結構 排序 交換排序 氣泡排序法

資料結構 排序 交換排序 氣泡排序法 氣泡排序 bubble sorting 的基本思想是 設待排序n個元素存放在陣列a n 中,無序區範圍初始為 a 0 a 1 a 2 a n 1 冒泡 排序方法是在當前無序區內,從最上面的元素a 0 開始,對每兩個相鄰的元素a i 1 和a i i 0,1,n ...

資料結構 交換排序之氣泡排序法詳解

基本思想 從第乙個數開始,依次往後比較,如果前面的數比後面的數大就交換,否則不作處理。這就類似燒開水時,壺底的水泡往上冒的過程。具體過程 採用雙層迴圈進行氣泡排序 舉例 待排序資料如下 87 645第一次比較 78 645第二次比較 76 845第三次比較 76 485第四次比較 76 458經過四...

資料結構 排序 交換排序 快速排序法

資料結構 排序 交換排序 快速排序法 1 演算法思想 快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 1 分治法的基本思想 分治法的基本思想是 將原問題分解為若干個規模更小但結構與原問題相...