使用JAVA直观感受快速排序与冒泡排序的性能差异
2016-01-08 22:56
501 查看
初学算法,肯定会编写排序算法
其中两个最为有名的就是冒泡排序和快速排序
理论上冒泡排序的时间复杂度为O(N^2),快速排序的时间复杂度为O(NlogN)
下面本门使用JAVA,分别编写三段排序程序
对十万个0-9999的整数进行一次冒泡排序
对十万个0-9999的整数进行1000次快速排序,使用递归完成
对十万个0-9999的整数进行1000次快速排序,使用堆栈完成
对十万个0-9999的整数进行一次冒泡排序:
执行结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/16/a4e39766b012a2463fe52508f7a8be6b.png)
下面是使用递归方法的快速排序:
执行结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/16/f8f1582ca5d225792805dc92dae7ad6a.png)
最后一段程序是使用数据结构栈来实现的非递归快速排序算法:
执行结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/16/c2479687335aff6f334044ab31529839.png)
综上所述,可以直观的看出来
复杂度为O(N^2)的冒泡排序速度相当慢,一次排序就要18秒,而复杂度为O(NlogN)的快速排序基本上20毫秒内就搞定,这就是算法的力量啊。
递归函数在这里并不会影响性能,直观,简洁的递归算法是相当实用的,除非动态规划算法一定要将递归转变成循环,否则大多数情况下并不需要改变递归方法,而非递归算法因为会引入其他数据结构,有可能导致程序还会稍稍有些额外开支。
本文来自:http://www.hexcode.cn/article/4090/show
其中两个最为有名的就是冒泡排序和快速排序
理论上冒泡排序的时间复杂度为O(N^2),快速排序的时间复杂度为O(NlogN)
下面本门使用JAVA,分别编写三段排序程序
对十万个0-9999的整数进行一次冒泡排序
对十万个0-9999的整数进行1000次快速排序,使用递归完成
对十万个0-9999的整数进行1000次快速排序,使用堆栈完成
对十万个0-9999的整数进行一次冒泡排序:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/16/a4e39766b012a2463fe52508f7a8be6b.png)
下面是使用递归方法的快速排序:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/16/f8f1582ca5d225792805dc92dae7ad6a.png)
最后一段程序是使用数据结构栈来实现的非递归快速排序算法:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/16/c2479687335aff6f334044ab31529839.png)
综上所述,可以直观的看出来
复杂度为O(N^2)的冒泡排序速度相当慢,一次排序就要18秒,而复杂度为O(NlogN)的快速排序基本上20毫秒内就搞定,这就是算法的力量啊。
递归函数在这里并不会影响性能,直观,简洁的递归算法是相当实用的,除非动态规划算法一定要将递归转变成循环,否则大多数情况下并不需要改变递归方法,而非递归算法因为会引入其他数据结构,有可能导致程序还会稍稍有些额外开支。
本文来自:http://www.hexcode.cn/article/4090/show
相关文章推荐
- Java 中File类的使用
- 深入Java集合学习系列:HashMap的实现原理
- 你真的了解Java静态内部类吗
- 深入理解java虚拟机(五)
- java:IO流学习小结
- JAVA中重写equals()方法的同时要重写hashcode()方法
- java-NoSuchMethodError问题解决——傻瓜式
- Spring的辅助类
- 【番外】Java和eclipse的简单了解
- Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/SystemException
- Java集合部分
- Java内存泄露
- 用JAVA实现大文件上传及显示进度信息
- org.springframework.beans.ConversionNotSupportedException
- Java中的线程池(2)
- SpringMVC配置数据库连接池
- Aio--Java异步IO的 Socket Demo
- 删除指定值的结点
- JAVA_HOME环境的配置
- Java读取并修改图片的像素值