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;
}