冒泡排序(BubbleSort)

    冒泡排序是一个经典的排序算法,它的原理简单,在数据不多的前提下可以取得良好的效果。

    算法原理:每次比较待排列序列中相邻两个数字,若是逆序,则交换两个数字位置,从左至右每两个相邻数字都完成了一次比较,则称完成了一趟比较。假设序列元素为n的前提下,最多n趟就可以完成排列任务。

第一趟排列
待排列序列 3、5、4、2、1
第一次比较 3、5、4、2、1
第二次比较 3、4、5、2、1
第三次比较 3、4、2、5、1
第四次比较 3、4、2、1、5
第一趟完成 3、4、2、1、5

    算法伪码:

    1.基于上述描述,可以很直观地给出代码:

BubbleSort(int* A,int length)
{
    int i,j;
    for(i=0;iA[j+1])
            {
                int temp=A[j];
                A[j]=A[j+1];
                A[j+1]=temp;
            }
        }
}

上述算法很直观,容易理解。可以轻易得出复杂度为O(n^2)。但这中方法明显不是最简单地,在给出已经有序地序列时,它仍然需要n趟排列。这时可以考虑,设置一个标志量,用以标记该趟排列是否发生了元素交换,如果没有则说明元素已经有序了。

    2.优化后的冒泡排序:

BubbleSort_1(int* A,int length)
{
    int i,j;
    bool flag=true;
    for(j=length;j>0&&flag;j--)
    {
        flag=false;
        for(i=0;iA[i+1])
            {
                int temp=A[i];
                A[i]=A[i+1];
                A[i+1]=temp;
                flag=true;
            }
        }
    }
}

使用上述算法之后,对于部分有序的序列,其耗费时间将会降低一些,但是时间复杂度仍然是O(n^2)。

    综上所述,冒泡算法的描述就完成了。


参考书目:

数据结构. 严蔚敏. 清华大学出版社




你可能感兴趣的:(数据结构)