算法学习笔记(3)---冒泡排序
2014-03-11 00:00
218 查看
冒泡排序是针对少量待排数据的一种有效的排序算法,其思想是非常容易理解的:假设待排的数组长度为N
比较前后相邻的两个数,如果前面数据大于后面数据,则进行交换
将数据进行N-1次比较后,最大的数据就会浮到数组的最后
将N=N-1,重复以上的步骤
代码实现为:
后来想到这种算法貌似有改进的地方,而且在CSDN的博客上看到确实有改进的地方。比如:5 1 2 3 4 这个数组,在进行第一趟排序后,数组为1 2 3 4 5,第二趟排序不进行任何交换操作,这说明该排序已经是升序,那么可以终止第3趟、第4趟排序。这里只需设置一个flag标签,判断第k次是否进行交换,如果没有则跳出循环,其代码如下:
比较前后相邻的两个数,如果前面数据大于后面数据,则进行交换
将数据进行N-1次比较后,最大的数据就会浮到数组的最后
将N=N-1,重复以上的步骤
代码实现为:
int bubbleSort_1(int *arr, int len) { int i,j; for (i=0; i<len-1; i++) for (j=0; j<len-1-i; j++) if (arr[j] > arr[j+1]) swap(arr[j], arr[j+1]); return 0; }
后来想到这种算法貌似有改进的地方,而且在CSDN的博客上看到确实有改进的地方。比如:5 1 2 3 4 这个数组,在进行第一趟排序后,数组为1 2 3 4 5,第二趟排序不进行任何交换操作,这说明该排序已经是升序,那么可以终止第3趟、第4趟排序。这里只需设置一个flag标签,判断第k次是否进行交换,如果没有则跳出循环,其代码如下:
int bubbleSort_2(int *arr, int len) { int i,j; bool flag = false; for (i=0; i<len-1; i++) { flag = false; for (j=0; j<len-1-i; j++) if (arr[j] > arr[j+1]) { swap(arr[j], arr[j+1]); flag = true; } if (!flag) break; } return 0; }
相关文章推荐
- [学习笔记]排序算法之冒泡排序
- 黑马程序员—Java基础学习笔记之排序算法:选择排序&冒泡排序
- 算法学习笔记之冒泡排序
- 【iOS学习笔记】iOS算法(四)之冒泡排序
- [算法学习笔记]冒泡排序和选择排序
- 机器学习笔记 监督学习算法小结(一)
- 『算法学习笔记』1st day. 顺序结构程序设计
- Java学习笔记_15_冒泡排序、插入排序
- Tensorflow学习笔记参考—源码分析之最近算法
- 简单算法学习笔记一
- 数据结构与算法学习笔记——动态规划(1)
- 【算法学习笔记】20.算法设计初步 归并排序 求逆序数
- 算法导论学习笔记-第十三章-红黑树
- 后缀数组学习笔记——罗穗骞倍增算法代码
- C++学习笔记---容器和算法
- OpenCV 2 学习笔记(11): 算法的基本设计模式<2>:使用Controller
- 算法学习笔记:爬山法与模拟退火
- 《C++ Primer》第10章:泛型算法 学习笔记总结
- 黑马程序员_java基础学习笔记之排序算法(选择排序、冒泡排序
- OpenCV 2 学习笔记(12): 算法的基本设计模式<3>:单例模式(Singleton pattern)