java 实现 SelectSort 选择排序算法详解( 二 )
测试测试代码【java 实现 SelectSort 选择排序算法详解】List<Integer> list = RandomUtil.randomList(5);System.out.println("开始排序:" + list);SortHelper.select(list);System.out.println("完成排序:" + list);
测试日志日志如下:
开始排序:[6, 11, 79, 77, 50]完成排序:[6, 11, 50, 77, 79]
复杂度与稳定性从代码中可以看出一共遍历了n + n-1 + n-2 + … + 2 + 1 = n * (n+1) / 2 = 0.5 * n ^ 2 + 0.5 * n,那么时间复杂度是 O(N^2) 。
所以性能还是比较差的,一般不建议使用 。
因为在无序部分最大元素和有序部分第一个元素相等的时候,可以将无序部分最大元素放在前面,所以选择排序是稳定的 。
开源地址为了便于大家学习,上面的排序已经开源,开源地址:
https://github.com/houbb/sort欢迎大家 fork/star,鼓励一下作者~~
小结快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的 。
每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边 。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了 。
只能说,分治算法,永远滴神!
希望本文对你有帮助,如果有其他想法的话,也可以评论区和大家分享哦 。
各位极客的点赞收藏转发,是老马持续写作的最大动力!
推荐阅读
- 通过API网关实现微服务管控-限流,熔断和降级
- Spring Boot 优雅地实现接口参数校验
- JavaScript数据结构——队列的实现
- 常用Java开发工具介绍
- 高可用解决方案:同城双活?异地双活?异地多活?怎么实现?
- Netflix如何实现Android与 iOS共用一套代码?
- 开源,轻松实现RTC与SIP互通
- JAVA中常见的阻塞队列详解
- Java线上CPU100% 问题排查
- JavaScript,如何在字符串中找到一个字符?