您的位置:首页 > 其它

冒泡排序

2015-04-29 18:54 267 查看
排序算法是做算法的基础,也是程序员的基本功.以前在学校没有认真学,现在回头看看其实排序算法也挺有意思的.所以接下来几篇博客我将详细列举常用的排序算法.

冒泡排序

最简单的排序算法

简单粗暴, 先上代码 :

// 冒泡排序
void bubbleSort(int arr[], int len)
{
    int temp;
    for (int i = 0; i < len; ++i)
    {
        for (int j = len - 1; j > i; --j)
        {
            if (arr[j] < arr[j - 1])
            {
                temp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = temp;
            }
        }
    }
}


之所以被称为冒泡排序就是因为其排序的工程就想冒泡一样:

1. 从最后一个位置开始, 依次向前比较, 如果小于前一个数, 则与前一个数交换, 直到到达顶端.

2. 又回到最后一个位置, 重复第 1 步的工作. 循环 n-1次则可以完成所有排序.

步奏:



这里模拟一个数组从 10 ~ 1, 总最后一个元素开始:

1<2, 1和2交换位置

1<3, 1和3交换位置



1<10, 1和10交换位置

最后序列变成了:

1, 10, 9, 8, 7, 6, 5, 4, 3, 2

然后再从最后一个元素2开始, 从最后向前比较, 最终变成 :

1, 2, 10, 9, 8, 7, 6, 5, 4, 3



最后就实现了排序. 很简单吧!!!

时间复杂度 :

我们来算一下冒泡排序一共比较了多少次, 应该是: 9+8+…+1 也就是

(n-1)+(n-2)+…+1 = (n^2)/2, 时间复杂度为 O(n^2).

然后是交换的次数, 这个取决于数组本来的顺序, 我们例子中是完全规则的倒序, 所以交换次数是最多的, 也是(n^2)/2次.

排序算法中比较耗费时间的就是两件事: 比较 + 交换. 所以在判断排序算法优劣的时候主要比较这两个点.

好了,冒泡就讲到这里,下一篇是选择排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: