【算法1】之冒泡排序极其优化
2014-04-22 00:35
204 查看
冒泡排序怕是所有人开始学习算法接触的第一个例子吧。
很好理解其过程:
1、给定一个数组,第一轮循环中比较相邻两个元素的大小,如果前面元素大于后面的就交换两个元素。这样第一轮结束就保证最大的元素在最后一个。
2、进入第二轮循环,直到循环次数等于数组个数。
冒泡排序是稳定排序算法。
给出自己的实现:
简单说一下我定义的一个宏,它的功能就是计算出数组元素的个数,用户就不用输入个数了。
思考:
如果数组中只有前面两个数需要排序,后面都是有序的怎么优化算法?
答案:
设置一个bool类型的标志,如果某次循环没有发生交换,那么就可以说数组已经有序。代码如下:
在这里我设置了一个n,用于表示出循环执行了多少次,明显优化后可以减少执行次数。
最后发个连接,
动态比较冒泡排序和快速排序的经典动画
很好理解其过程:
1、给定一个数组,第一轮循环中比较相邻两个元素的大小,如果前面元素大于后面的就交换两个元素。这样第一轮结束就保证最大的元素在最后一个。
2、进入第二轮循环,直到循环次数等于数组个数。
冒泡排序是稳定排序算法。
给出自己的实现:
#include "stdafx.h" #define _Count sizeof(p) / sizeof(p[0]) int _tmain(int argc, _TCHAR* argv[]) { int p[] = { 100, 30, 50, 70, 90,1000,101,1020,103,560,78 }; int tmp; for (int i = 0; i < (_Count); i++){ for (int j = 1; j < (_Count); j++){ if (p[j-1]>p[j]) { tmp = p[j]; p[j] = p[j-1]; p[j-1] = tmp; } } } for (int k = 0; k < (_Count); k++){ printf("%d ", p[k]); } return 0; }
简单说一下我定义的一个宏,它的功能就是计算出数组元素的个数,用户就不用输入个数了。
思考:
如果数组中只有前面两个数需要排序,后面都是有序的怎么优化算法?
答案:
设置一个bool类型的标志,如果某次循环没有发生交换,那么就可以说数组已经有序。代码如下:
#include "stdafx.h" #define _Count sizeof(p) / sizeof(p[0]) int _tmain(int argc, _TCHAR* argv[]) { int p[] = { 100, 30, 50, 70, 90, 1000, 101, 1020, 103, 560, 78 }; int tmp,n=1; bool flag = true; while (flag){ flag = false; for (int j = 1; j < (_Count); j++){ if (p[j - 1]>p[j]) { tmp = p[j]; p[j] = p[j - 1]; p[j - 1] = tmp; flag = true; } } printf("%d\n", n++); } for (int k = 0; k < (_Count); k++){ printf("%d ", p[k]); } return 0; }
在这里我设置了一个n,用于表示出循环执行了多少次,明显优化后可以减少执行次数。
最后发个连接,
动态比较冒泡排序和快速排序的经典动画
相关文章推荐
- 《大话数据结构》读书笔记之冒泡排序和源码及优化算法源码
- 排序算法-对冒泡排序的优化改进算法
- 经典算法之二:冒泡排序及优化
- 算法——排序之冒泡排序优化
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 校招算法之冒泡排序的优化
- 看数据结构写代码(2) 选择排序 和 冒泡排序 算法优化
- 冒泡排序实现及算法优化(java)
- ios之经典算法冒泡排序以及优化
- 冒泡排序及算法优化
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 冒泡排序的优化算法
- 【算法导论-006】冒泡排序及其优化(BubbleSort)
- *冒泡排序及其算法优化分析
- 【深度学习】常见优化算法
- 冒泡排序及简单优化
- \t\t使用插入排序优化快速排序的算法实现
- SQL优化--物理优化--表扫描与连接算法
- 字符串转化为整数的算法改进及优化
- 排序算法之冒泡排序 - 优化版