####定義: 冒泡排序(bubble sort):是一種簡單的排序算法.它重復的走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來.走訪數列的工作就是重復的進行直到不需要交換,也就是這個數列已經排序完成.這個算法的由來是因為越小的元素由交換慢慢"浮"到數列的頂端.
####冒泡排序算法的運作如下:
- 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。這步做完后,最后的元素會是最大的數。
- 針對所有的元素重復以上的步驟,除了最后一個。
- 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
偽代碼
function bubble_sort (array, length) {var i, j;for(i from 0 to length-1){for(j from 0 to length-1-i){if (array[j] > array[j+1])swap(array[j], array[j+1])}}
}
復制代碼
函數 冒泡排序 輸入 一個數組名稱為array 其長度為length i 從 0 到 (length - 1) j 從 0 到 (length - 1 - i) 如果 array[j] > array[j + 1] 交換 array[j] 和 array[j + 1] 的值 如果結束 j循環結束 i循環結束
函數結束
復制代碼
助記碼
i∈[0, N-1) //循環N-1遍j∈[0, N-1-i) //每遍循環要處理的無序部分swap(j, j+1) //兩兩排序(升序/降序)
復制代碼
####實現示例
#include <stdio.h>
void bubble_sort(int arr[], int len) {int i, j, temp;for (i = 0; i < len - 1; i++)for (j = 0; j < len - 1 - i; j++)if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}
}
int main() {int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };int len = (int) sizeof(arr) / sizeof(*arr);bubble_sort(arr, len);int i;for (i = 0; i < len; i++)printf("%d ", arr[i]);return 0;
}
復制代碼
####排序1萬條隨機數字所運行的時間: 249442微秒