首页 > 编程语言 >【算法基础】:(二)希尔排序

【算法基础】:(二)希尔排序

时间:2023-06-12 16:38:58浏览次数:43  
标签:算法 10 arr buchang int 希尔 步长 排序


java基础算法

算法基础: 开始回顾下基础算法中的经典排序算法


希尔排序是插入排序的一种

算法思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至一时,整个文件恰被分成一组,算法便终止。重点是分组,然后排序


一、希尔排序代码

ublic class 希尔排序 {


    /**
     * @Description 希尔排序 从小到大
     * 初始 4, 5, 6, 3, 2, 1, 9, 8, 10
     * 步长 = n/2,每次都步长结束,都除以2 ,直到1为止
     * 初始长度为 9 第一次步长为 4,那么分组即: 4-2,5-1,6-9,3-8,2-10,
     * 比较之后交换:交换后的顺序为 2, 1, 6, 3, 4, 5, 9, 8, 10
     * 第二次步长为 2 那么分组即: 2-6,1-3,6-4,3-5,4-9,5-8,9-10
     * 比较之后交换:交换后的顺序为 2, 1, 4, 3, 6, 5, 9, 8, 10
     * ......................
     * @Author 寂寞旅行
     * @Date 10:26 2022/2/26
     * @Param [args]
     **/
    public static void main(String[] args) {
        int[] arr = {4, 5, 6, 3, 2, 1, 9, 8, 10};

        int buchang = arr.length / 2;

        int index = 0;
        while (buchang >= 1) {
            index++;
            for (int i = 0; i < arr.length; i++) {
                int temp;
                for (int j = buchang + i; j < arr.length; j += buchang) {
                    if (arr[i] > arr[j]) {
                        temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
            buchang = buchang / 2;
            System.out.println("第" + index + "次" + Arrays.toString(arr));
        }


        /**
         * 第1次[2, 1, 6, 3, 4, 5, 9, 8, 10]
         * 第2次[2, 1, 4, 3, 6, 5, 9, 8, 10]
         * 第3次[1, 2, 3, 4, 5, 6, 8, 9, 10]
         **/
    }
}

二、动画演示

【算法基础】:(二)希尔排序_基础算法


总结

可以看到希尔排序的核心思想是分组,然后排序;例如长度为n
第一次 步长 = n/2 ,也就是将元素进行分组,将所有i+=步长 分为一组,然后进行组内排序;
第二次 步长= 步长/2 ,再次将所有元素分组,将所有i+=步长 分为一组,然后进行组内排序;

直到步长为1,相当于所有元素都在同一组内,然后进行排序,至此循环结束;完成排序;


标签:算法,10,arr,buchang,int,希尔,步长,排序
From: https://blog.51cto.com/u_16158506/6463424

相关文章

  • 【算法基础】:(三)插入排序
    java基础算法算法基础:开始回顾下基础算法中的经典排序算法插入排序算法思想:一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过......
  • 【算法基础】:(四)选择排序
    java基础算法算法基础:开始回顾下基础算法中的经典排序算法选择排序是插入排序的一种算法思想:选择排序在开始的时候,先扫描整个列表,以找到列表中的最小元素,然后将这个元素与第一个元素进行交换。这样最小元素就放到它的最终位置上。然后,从第二个元素开始扫描,找到n-1个元素中的最小......
  • 算法:丑数
    题目描述编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数2,3,5的正整数。示例1:输入:6输出:true解释:6=2×3示例2:输入:8输出:true解释:8=2×2×2示例3:输入:14输出:false解释:14不是丑数,因为它包含了另外一个质......
  • 【技术积累】算法中的回溯算法【一】
    回溯算法是什么回溯算法是一种用于求解在某个搜索空间中的问题的算法。它基本思想是从问题的某一种状态开始不断地尝试各种可能的选择,直到找到一种满足问题要求的解或者发现这些选择都无法满足要求时,就回到上一个状态,尝试其他的选择。回溯算法通常采用递归的方法实现,它会不断地......
  • 算法题:求解斐波那契数列
    概念:斐波那契数列是指以0,1开始,之后每一项都等于前两项之和的数列,即:0,1,1,2,3,5,8,13,21,34,55,89,144……以此类推。这个数列最早是由13世纪意大利数学家斐波那契提出的,并在数学、自然科学和计算机科学等领域有着广泛的应用。题目:若有一只兔子,它每个月生一只小兔子,而小兔子......
  • 算法练习-day5
    哈希表242.有效的字母异位词题意:给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。示例:    思路:我们可以先创建一个unordered_map用于记录s中元素出现的次数,然后再遍历t,让t出现元素次数减去s出现......
  • 算法分析期末复习
    算法分析期末复习第一章算法概述基本理论知识课后作业做过的类型渐进阶排序,类似课后作业:1-3输入规模,类似课后作业:1-4,1-5第二章递归与分治基本概念,基本思想递归:直接或间接的调用自身的算法。分治:分治法的子问题间是相互独立的,子问题不包含公共的子问题。......
  • 深度学习降噪专题课:实现WSPK实时蒙特卡洛降噪算法
    大家好~本课程基于全连接和卷积神经网络,学习LBF等深度学习降噪算法,实现实时路径追踪渲染的降噪本课程偏向于应用实现,主要介绍深度学习降噪算法的实现思路,演示实现的效果,给出实现的相关代码线上课程资料:本节课录像回放加QQ群,获得相关资料,与群主交流讨论:106047770本系列文章为......
  • RC4加密算法及Python实现
    一、RC4加密算法原理RC4算法是一种流加密算法,由RonRivest在1987年设计。它的主要特点是简单快速,而且在加密解密过程中使用的密钥长度可变。因此,RC4算法被广泛应用于网络安全领域,如SSL、TLS、WEP、WPA等协议中。RC4算法的加密过程如下:初始化S盒和T数组。S盒是一个256字节的数组,用于......
  • Oracle的分组排序功能实现最大值一列数据获取
    需求:按某列的最大值取整行数据。 select<includerefid="ALL_COLUMNS"/>from(select<includerefid="ALL_COLUMNS"/>,ROW_NUMBER()OVER(ORDERBYTOKEN_RATEDESC)ASrnfrom<includerefid="......