小白学算法2.1——冒泡排序
来源:互联网 发布:贵州网络贩枪 编辑:程序博客网 时间:2024/05/22 12:33
小白学算法2.1——冒泡排序
标签: 小白学算法
小白学算法2.x全部为排序算法
本节所有排序算法按照从小到大排序
1.冒泡排序算法
排序就是将一组对象按照某种逻辑顺序重新排列的过程
排序现象很普遍,比如高考成绩的全省排名。好的排序不仅能够在极短的时间内完成任务,而且空间消耗也非常的小,比如位排序。由于现在内存的限制并不像以前那么苛刻了,甚至有时候会消耗空间来节省时间,所以排序算法常常用时间复杂度来衡量。
冒泡排序属于初级排序,时间复杂度为
冒泡排序每次比较两个数,如果前一个数比后一个数大,则交换两个数的位置,假设待排序的数列为{5, 7, 1, 4, 2}
,冒泡排序的流程如下:
- 黄色表示本次比较的两个数,红色表示已经冒出到水面的“气泡”
i
表示排序的次数,j
表示某次排序比较的两个数
2.冒泡排序实现
假设一共有n个数需要排序,那么一共需要排序n-1
次,第i次排序比较n-1-i
次。
- 每次排序都会将最大的数“浮出水面”,
n
个数浮出n-1
个数后,最后一个数必然是最小的,故只需要n-1
次排序 n
个数两两依次做比较,需要n-1
次比较;每“浮出”一个数,待排序的数就少一个,所以第i
次排序比较n-1-i
次
void bubbleSort(int* A, int n) { for (int i=0; i<n-1; i++)//排n-1次 { for (int j=0; j<n-i-1; j++)//第i次做n-1-i对比较 { if(A[j] > A[j+1]) { int swap = A[j]; A[j] = A[j+1]; A[j+1] = swap; } } }}
3.总结
- 冒泡排序其实还可以改进一下,添加一个bool型flag变量,每次排序前置为false,如果在该次排序中发生了数值位置交互,那么把flag置为true,在每次排序的结尾检测flag,如果为false则跳出排序循环。因为很可能在某次排序中整个数列就已经有序化了(如上例在
i=2
时就已经排序完毕),有序化数列中没有倒置对,故就没有交换了,故可跳出循环 - 冒泡排序是稳定排序,即当主键相等时,有序化后的数列主键相等的元素相对位置并没有改变
- 冒泡排序属于初级排序,时间复杂度为
O(n2) ,当数据量较大时,建议采用高级排序
0 0
- 小白学算法2.1——冒泡排序
- 排序算法—冒泡排序
- 【排序算法】——冒泡排序算法
- 算法——冒泡排序
- 算法——冒泡排序
- 算法——冒泡排序
- 啊哈!算法—冒泡排序
- 算法之—冒泡排序
- 【算法系列】—冒泡排序
- 【数据结构】——排序算法——2.1、冒泡排序
- 排序算法———冒泡排序
- 排序算法——冒泡法排序
- 排序算法——冒泡排序
- 排序算法——冒泡排序
- 排序算法——冒泡排序
- 排序算法总结——冒泡排序
- 经典排序算法——冒泡排序
- 排序算法1——冒泡排序
- MJExtension的使用
- 嵌套的面板(JPanel)练习
- 黑马程序员--java基础语法下篇(day03)
- python logging动态变更输出日志文件名
- Visual Studio Enterprise 2015简体中文版(企业版)
- 小白学算法2.1——冒泡排序
- 单一label多颜色多字体
- iOS - UITableView性能优化总结
- poj Red and Black
- 如何添加Samba用户
- cocos2d-x v3.9 与ActionInterval的孩子们之间的对话(3)
- 1287: HH实习【斐波那契数列】
- C#中的反射例子及思考
- List<T> 排序