1、概述和基本实现
由于是相邻元素比较交换,所以冒泡排序是一种稳定排序算法
在最优的情况下,时间时间复杂度O(n);
平均和最坏情况均是O(n^2)
基本实现:
void bubble_sort(int a[], int len)
{
int i, j, tmp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
{
if (a[j] > a[j+1])
{
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
2、带标志的冒泡排序
通过设置标志,省去对已有序部分不必要的比较
方法一:设置是否发生交换的标志,只要有一趟没有发生交换,那么就会停止循环扫描,从而减少了扫描的次数。
void bubble_tag( int a[], int n)
{
int i, j, tmp, tag = 1;
for( i=1; i<n && tag; i++ )
{
tag = 0;
for( j=0; j<n-i; j++ )
{
if( a[j] > a[j+1] )
{