冒泡排序及改进
2015-06-04 17:31
246 查看
#include <iostream> #define N 10 using namespace std; void swap(int &a,int &b) { // a = a + b; // b = a - b; // a = a - b; a ^= b; b ^= a; a ^= b; } void BubbleSort1(int *a) { int i,j; for(i = 0;i < N-1;i++) { for(j = i+1;j < N;j++) { if(a[i] >= a[j]) { swap(a[i],a[j]); } } } for(i = 0;i < N;i++) { cout << a[i] << " "; } cout << endl; } void BubbleSort2(int *a) { for(int i = 0;i < N;i++) { for(int j = N-2;j >= i;j--) { if(a[j] > a[j+1]) { swap(a[j],a[j+1]); } } } for(int i = 0;i < N;i++) { cout << a[i] << " "; } cout << endl; } void BubbleSort3(int *a) { bool flag = 1; for(int i = 0;i < N-1 && flag; i++) { bool flag = 0; for(int j = N-2;j >= i;j--) { if(a[j] > a[j+1]) { flag = 1; swap(a[j],a[j+1]); } } } for(int i = 0;i < N;i++) { cout << a[i] << " "; } cout << endl; } int main() { int a = {2,1,5,3,4,10,6,9,8,7}; BubbleSort1(a); BubbleSort2(a); BubbleSort3(a); return 0; }
冒泡排序的复杂度分析:
最好的情况,也就是要排序的表本身是有序的,那么我们比较次数,根据最后改进的代码,可以判断出也就是 n-1 次的比较,没有数据交换,时间复杂度为O
;
最坏需要的情况,即待排序的表是逆序的情况,此时需要比较n(n + 1)/2次,因此总的时间复杂度为O[n^2].
相关文章推荐
- 利用堡垒主机获取防火墙里面主机信息
- Mac 终端命令大全介绍
- 5.1.8 Balanced Binary Tree
- Appium移动自动化测试(二)--安装Android开发环境
- 模拟登录
- Array类型-转换方法
- 病毒的基本知识
- Rightmost Digit(快速幂)
- 关于去哪儿网的UI自动化测试脚本(Python实现)
- [FZYZOJ 1339] 修改密码
- 如何修改MySql用户密码
- 卡特兰数 大数模板
- jcmd命令使用
- Python中thread 多线程处理
- apache2.2 虚拟主机配置
- poj 3384 Feng Shui(半平面交的联机算法)
- iOS随机数
- 将文件流转换成String,然后将转换后的String再转换成文件流
- Java设计模式--单例模式
- webview中input file伪造无刷新上传(兼容Android和IOS)