####定义: 冒泡排序(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微秒