转载请注明出处。
假设升序排列n个元素。
1、比较相邻的元素。如果前一个比后一个大,交换。若小于或等于,则不改变顺序,所以冒泡排序是稳定的。
2、对每一对相邻元素做同样的工作。遍历完一次后,最后的元素会是最大的数。
3、第二次对前n-1个元素重复上述操作。最后一个元素是最大的,不用管。
4、如此重复n-1次,最后一次比较前两个元素。
时间复杂度:
历次遍历依次需要比较n-1次,n-2次,n-3次,。。。,2次,1次。总共需要比较 n(n-1)/2 次。
时间复杂度为O()。
测试代码:
#include<iostream>
#include<iterator>
using namespace std;
void bubbleSort(int list[], int length){ //ascend
int temp;
for(int j=1; j<length; j++){
for(int i = 0; i<length - j; i++){
if(list[i] > list[i+1]){ //swap
temp = list[i];
list[i] = list[i+1];
list[i+1] = temp;
}
}
}
}
int main(){
ostream_iterator<int> screen(cout);
int list[] = {9, 8, 7, 6, 5, 4};
bubbleSort(list, sizeof(list)/sizeof(int));
copy(list, list+sizeof(list)/sizeof(int), screen);
return 0;
}
参考资料: