排序之冒泡排序
来源:互联网 发布:音频矩阵处理器 编辑:程序博客网 时间:2024/06/05 07:37
冒泡排序思想
对于一个数字序列来说,我们可以依次比较相邻的两项数字,假如相邻的两项分别记为A和B。如果A的值大于B,那么进行A、B之间顺序的交换,将较大值移到后面。之后再用第二个值与第三个值进行比较,将较大的值放到后面,以此类推。
冒泡排序示例
每次遍历一次序列,都会找到一个数的最终位置。文字讲解会比较抽象,以下为具体事例:
假设一个序列为:24 ,12,42,67,53,21,90,69
则排序过程如下:
第一趟排序(找0~n-1序列中最大的值,并放在最后的位置):
12,24,42,53,21,67,69,90
第二趟排序(找0~n-2序列中的最大值,放在倒数第二位置):
12,24,42,21,53,67,69,90
第三趟排序(确定倒数第三个位置)
12,24,21,42,53,67,69,90
第四趟排序(确定倒数第四个位置)
12,21,24,42,53,67,69,90
之后进行第五趟排序,在进行第五趟排序中发现当前序列中没有发生位置转换,则说明序列已经有序。
冒泡排序代码实现
private static void performSort(int[] array) { int length = array.length; //设置一个变量值,标记是否进行了序列移动 boolean flag = true; while (flag) { flag = false; for (int i = 1; i < length; i++) { if (array[i - 1] > array[i]) { int temp = array[i]; array[i] = array[i - 1]; array[i - 1] = temp; flag = true; } } --length; } }
冒泡排序性能分析
(1)时间复杂度
在设置标志变量之后:
当原始序列“正序”排列时,冒泡排序总的比较次数为n-1,移动次数为0,也就是说冒泡排序在最好情况下的时间复杂度为O(n);
当原始序列“逆序”排序时,冒泡排序总的比较次数为n(n-1)/2,移动次数为3n(n-1)/2次,所以冒泡排序在最坏情况下的时间复杂度为O(n^2);
当原始序列杂乱无序时,冒泡排序的平均时间复杂度为O(n^2)。
(2)空间复杂度
冒泡排序排序过程中需要一个临时变量进行两两交换,所需要的额外空间为1,因此空间复杂度为O(1)。
(3)稳定性
冒泡排序在排序过程中,元素两两交换时,相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 冒泡排序之排序
- 排序之 冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- 排序之冒泡排序
- Nginx 访问控制配置
- redis环境搭建
- Unity3D有关内存管理的资料网址
- 【数据库SQL】找到会员卡重复的,保留其中一条数据
- Java基础之private、protected、public和default的区别
- 排序之冒泡排序
- JavaScript DOM编程艺术第七章Ajax学习笔记
- HLFS: 基于HDFS和LFS技术的EBS开源实现
- POJ 2777 Count Color (线段树的区间更新+lazy tag)
- Oracle安装不完全后使用自带工具调整(Net Manager,Net Configuration Assistant)的相关总结
- 嵌入式Linux入门2:工具掌握(Windows篇)
- Android——实现两次点击返回键提示退出
- Linux下Redis的安装与部署
- 回车触发事件