接下来我们要介绍的是排序算法中极为标志性,并且经常在教材中作为经典案例出现的——冒泡排序。
冒泡排序(Bubble sort)的算法思想也是较为容易去理解的,我们参照冒泡这一物理现象,会发现,往往大的气泡都会往上运动,而小的气泡往往都在下方。冒泡排序的名字也就是这么由来的。它的算法步骤大致如下:
void BubbleSort(int* a, int n)
{
bool exchange = false;//标记是否发生交换
for(int j=0;j<n;j++)
{
for (int i = 1; i < n-j; i++)
{
//如果前一个元素大于后一个元素,交换
if (a[i - 1] > a[i])
{
int temp = a[i - 1];
a[i - 1] = a[i];
a[i] = temp;
}
if(exchange == false)//如果没有发生交换,说明此时已经有序,那么就直接跳出
{
break;
}
}
}
}
我们可以看出,实际上冒泡排序是华而不实的一种排序算法。它在数据较少或者较为有序的时候,可以有很好的效率,但是一旦数据多起来或者较为无序,那么需要重复的次数就会大幅度增加,从而后期乏力,效率降低。
鉴于冒泡排序不会改变前后元素的相对位置,所以:稳定