冒泡排序及其优化
2016-04-21 16:32
936 查看
冒泡排序的基本思路是(以升序为例):每次将相邻两个数字进行比较,将小的数字放在大的前边。例如已知六个数字为9,8,5,4,2,0,第一次现将最前边的9和8进行调换,其次再将9和5进行调换......如图(只进行了两趟交换)
如此进行下去,如果有n个数,就要进行n-1趟比较;在第一趟要进行n-1次交换,在第j次就要进行n-j次交换。
假设有一组数字:1 2 3 4 5 6 7 8 9 0,那么用上边的方法也是可以实现的,但是,对于前边9个数字来说它们已经是有序的了,如果还用这种方法就会使效率降低很多(假设有n个数),因此,在此基础上可以将代码优化——每趟比较时,如果相邻两个数字之间满足升序或者降序的要求,那就不在交换,如果不满足,就前后交换。
如此进行下去,如果有n个数,就要进行n-1趟比较;在第一趟要进行n-1次交换,在第j次就要进行n-j次交换。
void bubble_sort(int *p,int sz) //冒泡排序 { int i = 0; int temp = 0; for(i=0; i<sz-1; i++) { int j = 0; for(j=0; j<sz-i-1; j++) { if(*(p+j) > *(p+j+1)) { temp = *(p+j); *(p+j) = *(p+j+1); *(p+j+1) = temp; } } } }
假设有一组数字:1 2 3 4 5 6 7 8 9 0,那么用上边的方法也是可以实现的,但是,对于前边9个数字来说它们已经是有序的了,如果还用这种方法就会使效率降低很多(假设有n个数),因此,在此基础上可以将代码优化——每趟比较时,如果相邻两个数字之间满足升序或者降序的要求,那就不在交换,如果不满足,就前后交换。
void bubble_sort(int *p,int sz) //冒泡排序--优化 { int flag = 1; int i = 0; int temp = 0; for(i=0; i<sz-1; i++) { int j = 0; flag = 1; for(j=0; j<sz-i-1; j++) { if(*(p+j) > *(p+j+1)) { temp = *(p+j); *(p+j) = *(p+j+1); *(p+j+1) = temp; flag = 0; } } if(flag == 1) { return ; } } }
相关文章推荐
- 冒泡排序
- MySQL 优化
- Google排名优化的几个影响因素
- DB2优化(简易版)
- Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
- C#中尾递归的使用、优化及编译器优化
- 对优化Ruby on Rails性能的一些办法的探究
- 优化Ruby脚本效率实例分享
- Asp编码优化技巧
- 如何监测和优化OLAP数据库
- mysql -参数thread_cache_size优化方法 小结
- 深入学习SQL Server聚合函数算法优化技巧
- C#冒泡法排序算法实例分析
- MySQL常见的底层优化操作教程及相关建议
- 详解mysql的limit经典用法及优化实例
- 数据库学习建议之提高数据库速度的十条建议
- oracle数据库sql的优化总结
- C++实现对输入数字组进行排序
- SQL语句性能优化(续)
- SQL语句优化提高数据库性能