1 算法原理
元素依次两两比较,大的数往后浮出,那么第一趟当n-2与n-1比较后,最大的数即浮到最后一个位置。
第二趟,当n-3与n-2比较时,第二大的数即浮到倒数第二个位置。
最后一趟,当0与1向比较的时候,最小的和第二小的数确定。
冒泡排序时间复杂度为O(n^2),速度比较慢。当数组长度为10万时,就耗时一分钟了。
冒泡排序是稳定排序,相等的元素,排序之后,相对位置不会变化。
2 示例代码
/** * @brief - sort an array by bubble sort * @param[in, out] array - pointer of the array [not null] * @param[in] size - size of the array [>0] * @retval 0 - succeed * @retval -1 - fail */ int bubble_sort(int *array, int size) { if ((NULL == array) || (size < 1)) { return -1; } if (1 == size) { return 0; } int i = 0; int j = 0; int tmp = 0; // 需要进行size-1趟排序 // 第一趟需要比较到size -2这个索引位置(即size-2与size-1两个位置比较) // 最后一趟需要比较到0索引位置(即0与1两个位置比较) for (i = size - 2; i >= 0; --i) { for (j = 0; j <= i; ++j) { // 大的往后冒泡 if (array[j] > array[j + 1]) { tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; } } } return 0; }