氣泡排序是一種交換排序。
什麼是交換排序呢?
交換排序:兩兩比較待排序的關鍵字,並交換不滿足次序要求的那對數,直到整個表都滿足次序要求為止。
演算法思想它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。
這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端,故名。
假設有乙個大小為 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 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。這個演算法的名字由來是因為...