排序算法1——冒泡排序

来源:互联网 发布:java attribute用法 编辑:程序博客网 时间:2024/05/01 09:25

冒泡排序是一种比较简单的 稳定排序 算法,效率不高,因此实际当中用到的机会并不多。但作为快速排序算法的基础,还是有必要了解一下。

顾名思义,冒泡就是指大的数字(气泡)会优先从底部升到顶端。具体实现的方式就是重复的 交换排序,通过两两比较不断地将大的数字右移。具体看下面的GIF图就很清楚了。

冒泡排序在 最坏情况下的时间复杂度是O(n²),最坏的情况比如将一组降序排好的数据按升序排列。

下面是一个相对效率较高的冒泡排序实现,通过设置一个标志位来控制提前跳出。

// 冒泡排序void BubbleSort(int data[], int n)  {      bool  swapped;    int temp_data;    for(int i=n-1; i>=0; i--)    {        swapped = false;        for(int j=0; j<i; j++)        {            if (data[j+1] < data[j])            {                // 交换数据                temp_data = data[j+1];                data[j+1] = data[j];                data[j] = temp_data;                swapped = true;            }        }        if(false == swapped)            break;    }}

PS. 上面程序中如果把data[j+1] < data[j] 改为 data[j+1] <= data[j],那么就不是稳定排序了。这说明了,排序算法的稳定性其实还和具体实现有关。

下面再给一个链接用来演示冒泡的原理:
http://www.cs.armstrong.edu/liang/animation/web/BubbleSort.html

下面给一个Flash链接,用来演示不同数据分布情况下,冒泡排序的复杂度。
https://www.toptal.com/developers/sorting-algorithms/bubble-sort

1 0