排序一 氣泡排序

2021-09-22 06:51:24 字數 3219 閱讀 3611

氣泡排序是一種交換排序

什麼是交換排序呢?

交換排序:兩兩比較待排序的關鍵字,並交換不滿足次序要求的那對數,直到整個表都滿足次序要求為止。

它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。

這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮

」到數列的頂端,故名。

假設有乙個大小為

n 的無序序列。氣泡排序就是要每趟排序過程中通過兩兩比較,找到第i個小(大)的元素,將其往上排

-氣泡排序示例圖

以上圖為例,演示一下氣泡排序的實際流程:

假設有乙個無序序列

第一趟排序:通過兩兩比較,找到第一小的數值

1 ,將其放在序列的第一位。

第二趟排序:通過兩兩比較,找到第二小的數值

2 ,將其放在序列的第二位。

第三趟排序:通過兩兩比較,找到第三小的數值

3 ,將其放在序列的第三位。

至此,所有元素已經有序,排序結束。

要將以上流程轉化為**,我們需要像機器一樣去思考,不然編譯器可看不懂。

假設要對乙個大小為

n 的無序序列進行公升序排序(即從小到大)。

(1) 

每趟排序過程中需要通過比較找到第

i 個小的元素。

所以,我們需要乙個外部迴圈,從陣列首端(下標

0) 開始,一直掃瞄到倒數第二個元素(即下標

n - 2) 

,剩下最後乙個元素,必然為最大。

(2) 

假設是第

i 趟排序,可知,前

i-1 

個元素已經有序。現在要找第

i 個元素,只需從陣列末端開始,掃瞄到第

i 個元素,將它們兩兩比較即可。

所以,需要乙個內部迴圈,從陣列末端開始(下標

n - 1

),掃瞄到(下標

i + 1)。

核心**

public

void bubblesort(

int list) 

}system.out.format("第 %d 趟:\t", i);

printall(list);}}

排序類別

排序方法

時間複雜度

空間複雜度

穩定性複雜性

平均情況

最壞情況

最好情況

交換排序

氣泡排序

o(n2)

o(n2)

o(n)

o(1)穩定

簡單 若檔案的初始狀態是正序的,一趟掃瞄即可完成排序。所需的關鍵字比較次數

c和記錄移動次數

m均達到最小值:

cmin

。所以,氣泡排序最好時間複雜度

o(n)

。若初始檔案是反序的,需要進行

n -1 

趟排序。每趟排序要進行

n - i 

次關鍵字的比較

(1 ≤ i ≤ n - 1)

,且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值:

cmax

氣泡排序的最壞時間複雜度

o(n2)

。因此,氣泡排序的平均時間複雜度

o(n2)

。總結起來,其實就是一句話:當資料越接近正序時,氣泡排序效能越好。

氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。

所以相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定排序演算法

對氣泡排序常見的改進方法是加入標誌性變數exchange,用於標誌某一趟排序過程中是否有資料交換。

如果進行某一趟排序時並沒有進行資料交換,則說明所有資料已經有序,可立即結束排序,避免不必要的比較過程。

核心**

//對 bubblesort 的優化演算法

public

void bubblesort_2(

int list) }//

如果標誌為false,說明本輪遍歷沒有交換,已經是有序數列,可以結束排序

if (

false == bchange)

break;

system.out.format("第 %d 趟:\t", i);

printall(list);}}

**實現

執行結果

排序前:      2    9    9    7    1    9    0    2    6    8   

第 0 趟:    0    2    9    9    7    1    9    2    6    8   

第 1 趟:    0    1    2    9    9    7    2    9    6    8   

第 2 趟:    0    1    2    2    9    9    7    6    9    8   

第 3 趟:    0    1    2    2    6    9    9    7    8    9   

第 4 趟:    0    1    2    2    6    7    9    9    8    9   

第 5 趟:    0    1    2    2    6    7    8    9    9    9   

排序後:      0    1    2    2    6    7    8    9    9    9  

排序(一)氣泡排序

參考文章 氣泡排序 bubble sort 原理 依次比較兩個相鄰的元素,將值大的元素交換至右端。首先比較第1個和第2個數,將小數放前,大數放後。以此類推。直至全部排序完成。n個數字要排序完成,總共進行n 1趟排序,每i趟的排序次數為 n i 次。這個演算法的名字由來是因為越小的元素會經由交換慢慢 ...

氣泡排序 排序 氣泡排序

既然寫了計組思來想去便打算把資料結構也寫下來,寫的時候總是發現看的時候無法發現的問題,受益良多。交換排序的基本思想 exchange until sorted 順序,分支,迴圈 注意偽 的熟悉 下面介紹兩種交換演算法 首先進行聯想,用乙個圖進行輔助聯想 水冒泡過程 頂部是陣列的begin,底部理解為...

排序演算法 一 氣泡排序

排序的演算法有很多,例如直接插入排序,希爾排序,氣泡排序,選擇排序,快速排序,堆排序等等。最簡單基礎就是氣泡排序了,關於排序hi有乙個系列。今天是第一篇,主要講氣泡排序演算法思想以及從各個方面對它進行優化。氣泡排序 原理舉例 設陣列長度為n。1 比較相鄰的前後二個資料,如果前面資料大於後面的資料,就...