分析
冒泡排序属于一种交换排序,从第一个元素开始,依次和后面一个元素比较,如果较大,则交换,否则什么都不用做,直接移动到下一个元素即可。比较简单,但请注意,冒泡排序的结束条件是在一轮比较中,没发生过交换。冒泡排序法是稳定的,因为在等于的情况下不发生交换,故相对顺序不会发生变化。
复杂度分析
对于时间复杂度:最好的情况,就是序列已经有序且和目标排序方向一致,故只会执行n-1次外层循环,记为O(n);最坏的情况,刚好相反,需要执行n(n-1)/2次, 记为O(n2)。
对于空间复杂度:不随排序规模增加而变大,所以为常数级别,记为O(1)
代码
void bubble(int *array, int n)
{
for(int i=n-1;i>0;--i)
{
int flag=0;
for(int j=0;j<i;++j)
{
if(array[j]>array[j+1])
{
swap(array, j, j+1);
flag=1;
}
}
if(!flag)break;
}
}