冒泡排序
来源:互联网 发布:zdm cad辅助设计软件 编辑:程序博客网 时间:2024/06/09 16:15
算法原理
冒泡排序(Bubble Sort)算法的原理如下:
对n个元素进行n-1趟排序,每趟排序中依次比较所有相邻元素,若存在逆序,则对其做交换。故第i趟处理后,元素中第i大(小)的元素必定排在第n-i+1(i)位。
逆序:在一个n级排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个“逆序”。(在降序排序时,前面的数小于后面的数,那么它们就称为一个“逆序”)
PS:在冒泡排序中,每进行一次元素交换,逆序数减一
优化:
(1)由于冒泡排序的特性:第i趟处理后,元素中第i大(小)的元素必定排在第n-i+1(i)位,我们可以在每次处理后,减少下趟所需排序的元素数量,即减1。
(2)上面的处理方式,明显存在做无用功的情况,当某次处理中,并未发现逆序存在时,说明排序已经完成,自然应当停止。
算法分析
时间复杂度
在最坏的情况下,元素为逆序排序,则元素交换次数为:n-1+n-2+n-3+…+1 = n*(n-1)/2,冒泡排序的时间复杂度为 O(n²)(极其低下,不过一般比较小的数据还是愿意用,因为容易打)
Code:
#include <iostream>using namespace std;int input[1000];void swap(int & a,int & b){ int tmp = a; a = b; b = tmp; return ;}bool Bubble(int begin,int end,int *data){ bool flag = false; for (int n = begin; n < end; n++, flag = false) { if (data[n] > data[n+1]) { swap(data[n],data[n+1]); flag = true; } } if (!flag) return true; return false;}void Bubble_Sort(int begin, int end, int * data){ while(!Bubble(begin,end--,data)) ; //这里以求升序为例}int main(){ int N; cin>>N; for (int n = 0; n < N; n++) cin>>input[n]; Bubble_Sort(0,N-1,input); return 0;}
阅读全文
0 0
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- hdu6096(字典树)
- 关注国情民情,从身边做起
- 关注民生民情
- 使用SQL Server发布数据库快照遇到错误:对路径“xxxxx”访问被拒绝的解决方法
- App的手势密码你做对了吗?
- 冒泡排序
- webpack---webpack构建vue多页面框架(二、webpak.config.js)
- wordPress使用记录
- Elasticsearch实现原理分析-1
- CoreData 的使用以及 CoreData 中的多线程问题
- RabbitMQ负载均衡(3)——Keepalived+HAProxy实现高可用的负载均衡
- Linux中top显示的信息详解
- uoj265【2016提高】愤怒的小鸟(状压dp)
- Scikit-Learn 、机器学习、Keras、卷积神经网络学习视频