《糊涂算法》之八大排序

文章8 |   阅读 3610 |   点赞0

《糊涂算法》之八大排序——希尔排序

x33g5p2x  于2021-09-29 转载在 其他  
字(1.6k)|赞(0)|评价(0)|浏览(463)

📚 八大排序算法合集——两万字,8张动图,450行代码。大厂面试必备。

🌲 配套源码地址:《八大排序》源码,提取码:5ehp

哈喽,大家好,我是一条~

今天给大家带来《糊涂算法》专栏的第二期内容——排序算法的讲解。相信无论是初学者学习还是大厂面试,都少不了排序算法这关,即使没学过算法,对冒泡排序也不会陌生。

今天,一条就带大家彻底跨过**「排序算法」这道坎,保姆级教程建议收藏**。⭐️

准备

古语云:“兵马未动,粮草先行”。想跟着一条一块把「排序算法」弄明白的,建议先准备好以下代码模板。

📢 观看本教程需知道基本循环语法两数交换双指针等前置知识。

📚 建议先看完代码逐步分析后再尝试自己写。

  • 新建一个Java工程,本文全篇也基于Java语言实现代码。
  • 建立如下目录结构

  • MainTest测试类中编写测试模板。
  1. /** * 测试类 * Author:一条 * Date:2021/09/23 */
  2. public class MainTest {
  3. public static void main(String[] args) {
  4. //待排序序列
  5. int[] array={6,10,4,5,2,8};
  6. //调用不同排序算法
  7. // BubbleSort.sort(array);
  8. // 创建有100000个随机数据的数组
  9. int[] costArray=new int[100000];
  10. for (int i = 0; i < 100000; i++) {
  11. // 生成一个[0,100000) 的一个数
  12. costArray[i] = (int) (Math.random() * 100000);
  13. }
  14. Date start = new Date();
  15. //过长,先注释掉逐步打印
  16. //BubbleSort.sort(costArray);
  17. Date end = new Date();
  18. System.out.println("耗时:"+(end.getTime()-start.getTime())/1000+"s");
  19. }
  20. }

该段代码内容主要有两个功能:

  • 调用不同的排序算法进行测试
  • 测试不同排序算法将10w个数排好序需要的时间。更加具象的理解时间复杂度的不同

希尔排序

希尔排序是插入排序的一个优化,思考往[2,3,4,5,6]中插入1,需要将所有元素的位置都移动一遍,也就是说在某些极端情况下效率不高,也称该算法不稳定

希尔排序是插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序

基本思想

希尔排序是把记录按下标的一定增量分组,对每组使用插入排序;

随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个序列恰被分成一组,算法便终止。

和插入排序一样,从局部到全部,希尔排序是局部再局部。

动图讲解

代码实现

  1. /** * 希尔排序 * Author:一条 * Date:2021/09/23 */
  2. public class ShellSort {
  3. public static void sort(int[] array) {
  4. System.out.println("希尔排序开始--------");
  5. //gap初始增量=length/2 逐渐缩小:gap/2
  6. for (int gap = array.length/2; gap > 0 ; gap/=2) {
  7. //插入排序 交换法
  8. for (int i = gap; i < array.length ; i++) {
  9. int j = i;
  10. while(j-gap>=0 && array[j]<array[j-gap]){
  11. //插入排序采用交换法
  12. int temp = array[j];
  13. array[j]=array[j-gap];
  14. array[j-gap]=temp;
  15. j-=gap;
  16. }
  17. }
  18. System.out.println(Arrays.toString(array));
  19. }
  20. }
  21. }

输出结果

耗时测试

点击查看更多排序算法

上一篇:快速排序
下一篇:插入排序

相关文章