冒泡排序
2016-05-16 19:15
246 查看
什么是冒泡?
每次比较【相邻】两个元素,若【顺序】错误就对把它们的位置互换。其中【顺序】指定是:从小到大或者从大到小。注意:
趟数越靠后,需要两两比较的数越少,而不需要每趟都和全部数比较。
原理:
每一趟只能确定一个数归位。第一趟只能确定末尾的数,第二趟只能确定倒数第二位的数,以此类推。
根据它的原理,我们可以总结出:
有 x 个数需要排序,只需要将 x -1 个数归位(若还不明白,就自己手写下每一步操作)。而已经归位的数则无需比较,浪费性能。
代码说话
public void sort(int... sortNums) { // 总共需要比较的趟数。因为最后一位数之后,已经没有和它相邻的数(即已归位)。so 总趟数为:总个数 - 1 final int count = sortNums.length - 1; for (int i = 0; i < count; i++) { // 该内循环遍历完,就有一位“最”值归位。 其中“最”,指的是当前这趟的“最”值,而不是全部数据中的“最”值 // 因此越往后面走,需要比较的次数越少。因为后面的数已经归位了,已经在它应该在的位置了,所以不需要和它比较 // 当前这趟,需要进行两两比较的数,即仅和未归位的数比较。 for (int j = 0; j < count - i; j++) { // 相邻的数进行比较。顺序不对,进行互换 // 当前排序规则为:从小到大。若需要从大到小,则使用 < 号,即【sortNums[j] < sortNums[j + 1]】 if (sortNums[j] > sortNums[j + 1]) { int flag = sortNums[j]; sortNums[j] = sortNums[j + 1]; sortNums[j + 1] = flag; } } } }
时间复杂度
O(N2)O(N^2) 这是一个很高的时间复杂度。相关文章推荐
- 栈的顺序存储——共享栈
- Oracle 11g改密码有效期
- leetcode.179. Largest Number
- JSON net.sf.jason使用
- .NET J2EE APP全局会话架构运用场景
- JS验证码
- [BZOJ4521][Cqoi2016]手机号码
- OpenJudge C16D Extracurricular Sports(构造/大数)
- 动态生成java文件的方法
- 调用libvlc_media_player_stop经常会导致程序挂起
- Android学习——Notification
- AD域控制器虚拟化完整篇
- 又一次造轮子-C++栈(泛型编程)
- Linux VFS虚拟文件系统
- a标签的背景图在ie8下不显示的问题
- 登陆界面
- VLC源码分析总结
- Caffe学习笔记2--Ubuntu 14.04 64bit 安装Caffe(GPU版本)
- 十步让你调试mvc源码
- iframe 自适应高度