排序之氣泡排序

2021-07-29 13:50:29 字數 1298 閱讀 2387

氣泡排序是一種交換排序。

什麼是交換排序呢?

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

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

這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端,故名。

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

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

假設有乙個無序序列

第一趟排序:通過兩兩比較,找到第一小的數值 1 ,將其放在序列的第一位。

第二趟排序:通過兩兩比較,找到第二小的數值 2 ,將其放在序列的第二位。

第三趟排序:通過兩兩比較,找到第三小的數值 3 ,將其放在序列的第三位。

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

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

假設要對乙個大小為 n 的無序序列進行公升序排序(即從小到大)。

(1) 每趟排序過程中需要通過比較找到第 i 個小的元素。

所以,我們需要乙個外部迴圈,從陣列首端(下標 0) 開始,一直掃瞄到倒數第二個元素(即下標 n - 2) ,剩下最後乙個元素,必然為最大。

(2) 假設是第 i 趟排序,可知,前 i-1 個元素已經有序。現在要找第 i 個元素,只需從陣列末端開始,掃瞄到第 i 個元素,將它們兩兩比較即可。

所以,需要乙個內部迴圈,從陣列末端開始(下標 n - 1),掃瞄到 (下標 i + 1)。

//基本的氣泡排序**

void bubblesort(int *a,int

length)}}

}

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

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

//冒泡演算法優化

void bubblesort(int *a,int

length)

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

if(false == flag)}}

排序之氣泡排序

例 將5個數字進行從大到小排序後輸出。輸入 35 99 18 12 76 輸出 99 76 35 18 12 對於例,氣泡排序大致的思路就是一趟一趟地迴圈比較,每一次迴圈的目的都是將未排序的數字中最小的數字移動到末尾。如 第一趟 xx xx xx xx 12 第二趟 xx xx xx 18 12 第...

排序之 氣泡排序

先科普一下到底什麼是氣泡排序 氣泡排序到底能幹嘛?氣泡排序 bubble sort 是一種 電腦科學領域的較簡單的 排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字...

排序之氣泡排序

氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。這個演算法的名字由來是因為...