冒泡排序
2015-04-29 18:54
267 查看
排序算法是做算法的基础,也是程序员的基本功.以前在学校没有认真学,现在回头看看其实排序算法也挺有意思的.所以接下来几篇博客我将详细列举常用的排序算法.
简单粗暴, 先上代码 :
之所以被称为冒泡排序就是因为其排序的工程就想冒泡一样:
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次.
排序算法中比较耗费时间的就是两件事: 比较 + 交换. 所以在判断排序算法优劣的时候主要比较这两个点.
好了,冒泡就讲到这里,下一篇是选择排序。
冒泡排序
最简单的排序算法简单粗暴, 先上代码 :
// 冒泡排序 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次.
排序算法中比较耗费时间的就是两件事: 比较 + 交换. 所以在判断排序算法优劣的时候主要比较这两个点.
好了,冒泡就讲到这里,下一篇是选择排序。