排序——冒泡排序
来源:互联网 发布:名器大魔王推荐知乎 编辑:程序博客网 时间:2024/06/06 02:12
冒泡排序是一种交换排序 ,
什么是交换排序呢?
交换排序:比较相邻两个元素的关键字 ,对不满足目标次序要求的那对数,两两交换,知道满足目标次序的要求。
基本思想
通过遍历数组元素 , 比较相邻两个元素关键字大小 ,调整这两个元素的位置使满足排序的要求 。遍历数组就是 重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
下面进行冒泡排序 过程: 以 4 3 1 2 5 为例 (升序排列)
实现:
void BubbleSort(int arr[], size_t size){assert(arr);bool flag = false;for (int i = 0; i < size; i++){for (int j = 0; j < size - i - 1; j++){if (arr[j] > arr[j + 1]){flag = true;std::swap(arr[j], arr[j + 1]);}}if (!flag)break;}}
时间复杂度
最好情况 : 若数组元素的顺序就是我们需要的顺序 , 那么一趟扫描就可以完成。所需关键字的比较次数C = N-1 ,移动次数M=0 此时,冒泡排序最好的时间复杂度O(n)
最坏情况: 若数组元素的顺序与我们需要的顺序恰好相反 ,需要N-1趟排序 。每一趟要进行N-i次比较(1 ≤ i ≤ N - 1) 和交换,此时交换次数和移动次数达到最大值:C = N(N-1)/2 =O(N^2) , 所以冒泡排序最坏的时间复杂度O(N^2)
因此,冒泡排序的平均时间复杂度为O(N2)。
总结起来,其实就是一句话:当数据越接近正序时,冒泡排序性能越好。
空间复杂度
没有借助辅助空间 , 所以空间复杂度O(1)
稳定性
由于冒泡排序是把数组所有相邻的元素都进行了比较 , 大的往后调整,小的往前调整 ,
相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
冒泡排序的动画效果:
0 0
- 排序——冒泡排序
- 排序——冒泡排序
- 排序——冒泡排序
- 排序——冒泡排序
- 排序——冒泡排序
- 排序——冒泡排序
- 内部排序—冒泡排序
- 排序算法—冒泡排序
- 排序方式—/冒泡排序/快速排序
- 冒泡—选择排序
- 排序—冒泡
- 排序算法1—插入排序、选择排序、冒泡排序
- 排序算法———冒泡排序
- 排序算法——冒泡法排序
- 排序算法——冒泡排序
- 排序算法——冒泡排序
- 交换排序——冒泡排序
- 交换排序——冒泡排序
- View的测量
- 如何提高专业英文阅读能力
- Python 之 安装 scipy,numpy,matplotlib,pandas
- android5.0源码编译错误小结
- 文艺病犯了
- 排序——冒泡排序
- hdu 1025 Cstructing Roads (Constructing Roads In JGShining's Kingdom)
- iOS 性能优化
- MySQL存储过程
- Android学习-Handler内存泄漏
- Android集成lrzsz
- 树链剖分
- 一个很有用的apache指令SetEnvIfNoCase
- 自己编写 的 bundler、pmvs、cmvs的程序Windows版本的连接