算法熟记-排序系列-冒泡排序
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