1. 简述
假设待排序数组为 int array[], 数组长度为n。
第1趟在array[0]-array[n-1]范围内,从后向前依次比较,把较小交换到前面,最终最小的元素会站在array[0]里面。
第2趟在array[1]-array[n-1]范围内,··· ,最终第二小的元素会站在array[1]里面。
...
第n-1趟,在array[n-2]-array[n-1]范围内,··· , 最终第n-1小的元素会站在array[n-2]里面。
至此,排序结束。
2. 复杂度
时间复杂度T=O(n*n),而且如果按照上面的算法来实现,最坏、最好以及平均的复杂度都是O(n*n),因为即使数组已经排序好了,还会继续比较下去。因此,如果在某一趟排序过程中,发现已经有序了,那么就可以终止排序了,即使得时间最好的时间复杂度T = O(n)。
稳定性属于稳定的排序。
3. 代码
void bubble_sort(
int
array[],
int
len) {
for ( int i = 0 ; i < len - 1 ; i ++ ) {
bool sorted = true ;
for ( int j = len - 1 ; j > i; j -- ) {
if (array[j] < array[j - 1 ]) {
sorted = false ;
swap(array[j], array[j - 1 ]);
}
}
if (sorted == true )
break ;
}
}
for ( int i = 0 ; i < len - 1 ; i ++ ) {
bool sorted = true ;
for ( int j = len - 1 ; j > i; j -- ) {
if (array[j] < array[j - 1 ]) {
sorted = false ;
swap(array[j], array[j - 1 ]);
}
}
if (sorted == true )
break ;
}
}
4. 参考资料
维基百科-冒泡排序 http://en.wikipedia.org/wiki/Bubble_sort