iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >分析Java排序算法之希尔排序
  • 761
分享到

分析Java排序算法之希尔排序

2023-06-25 13:06:47 761人浏览 独家记忆
摘要

这篇文章主要介绍“分析Java排序算法之希尔排序”,在日常操作中,相信很多人在分析Java排序算法之希尔排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析Java排序算法之希尔排序”的疑惑有所帮助!接下来

这篇文章主要介绍“分析Java排序算法之希尔排序”,在日常操作中,相信很多人在分析Java排序算法之希尔排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析Java排序算法之希尔排序”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

基本思想

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

简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步的对元素进行比较,移动,插入,比如[5,4,3,2,1,0]这种倒序序列,数组末端的0要回到首位置很是费劲,比较和移动元素均需n-1次。而希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后分组进行插入排序,随后逐步缩小增量,继续按组进行插入排序操作,直至增量为1。希尔排序通过这种策略使得整个数组在初始阶段达到从宏观上看基本有序,小的基本在前,大的基本在后。然后缩小增量,到增量为1时,其实多数情况下只需微调即可,不会涉及过多的数据移动。

我们来看下希尔排序的基本步骤,在此我们选择增量gap=length/2,缩小增量继续以gap = gap/2的方式,这种增量选择我们可以用一个序列来表示,{n/2,(n/2)/2...1},称为增量序列。希尔排序的增量序列的选择与证明是个数学难题,我们选择的这个增量序列是比较常用的,也是希尔建议的增量,称为希尔增量,但其实这个增量序列不是最优的。

代码实现

在希尔排序的理解时,我们倾向于对于每一个分组,逐组进行处理,但在代码实现中,我们可以不用这么按部就班地处理完一组再调转回来处理下一组(这样还得加个for循环去处理分组)比如[5,4,3,2,1,0] ,首次增量设gap=length/2=3,则为3组[5,2] [4,1] [3,0],实现时不用循环按组处理,我们可以从第gap个元素开始,逐个跨组处理。同时,在插入数据时,可以采用元素交换法寻找最终位置,也可以采用数组元素移动法寻觅。希尔排序的代码比较简单,如下:

package sortdemo;import java.util.Arrays;public class shellSort {    public static void main(String []args){        int []arr ={1,4,2,7,9,8,3,6};        sort(arr);        System.out.println(Arrays.toString(arr));        int []arr1 ={1,4,2,7,9,8,3,6};        sort1(arr1);        System.out.println(Arrays.toString(arr1));    }        public static void sort(int []arr){        //增量gap,并逐步缩小增量       for(int gap=arr.length/2;gap>0;gap/=2){           //从第gap个元素,逐个对其所在组进行直接插入排序操作           for(int i=gap;i<arr.length;i++){               int j = i;               while(j-gap>=0 && arr[j]<arr[j-gap]){                   //插入排序采用交换法                   swap(arr,j,j-gap);                   j-=gap;               }           }       }    }        public static void sort1(int []arr){        //增量gap,并逐步缩小增量        for(int gap=arr.length/2;gap>0;gap/=2){            //从第gap个元素,逐个对其所在组进行直接插入排序操作            for(int i=gap;i<arr.length;i++){                int j = i;                int temp = arr[j];                if(arr[j]<arr[j-gap]){                    while(j-gap>=0 && temp<arr[j-gap]){                        //移动法                        arr[j] = arr[j-gap];                        j-=gap;                    }                    arr[j] = temp;                }            }        }    }        public static void swap(int []arr,int a,int b){        arr[a] = arr[a]+arr[b];        arr[b] = arr[a]-arr[b];        arr[a] = arr[a]-arr[b];    }}

到此,关于“分析Java排序算法之希尔排序”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 分析Java排序算法之希尔排序

本文链接: https://www.lsjlt.com/news/304865.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 分析Java排序算法之希尔排序
    这篇文章主要介绍“分析Java排序算法之希尔排序”,在日常操作中,相信很多人在分析Java排序算法之希尔排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析Java排序算法之希尔排序”的疑惑有所帮助!接下来...
    99+
    2023-06-25
  • 排序算法之希尔排序法解析
    目录什么是希尔排序法希尔排序法与插入排序法之间的区别与联系代码演示对比什么是希尔排序法 希尔排序法(Shell Sort),也称为缩小增量排序,是一种改进的插入排序算法。它通过将待排...
    99+
    2023-08-08
    希尔排序算法 希尔排序法
  • Java 十大排序算法之希尔排序刨析
    目录希尔排序原理希尔排序的API设计希尔排序的代码实现希尔排序是插入排序的一种,又称"缩小增量排序”,是插入排序算法的一种更高效的改进版本。 希尔排序原理 1.选定一个增长量h,按照...
    99+
    2024-04-02
  • python排序算法之希尔排序
    目录一、前言二、算法描述第一步:第二步:第三步:第四步:第五步:三、代码实现一、前言 相关知识来自《python算法设计与分析》。初级排序算法是指几种较为基础且容易理解的排序算法。初...
    99+
    2023-05-17
    python排序算法 python希尔排序
  • 图解Java排序算法之希尔排序
    目录基本思想代码实现总结希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小...
    99+
    2024-04-02
  • 排序算法图解之Java希尔排序
    目录1.希尔排序简介2.希尔排序算法图解3.希尔排序代码实现1.希尔排序简介 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,其也是一种特殊的插入排序,即将...
    99+
    2022-11-13
    Java 希尔排序 Java 排序算法 Java 排序
  • java 排序算法之希尔算法
    目录插入排序存在的问题简单介绍基本思想代码实现大数据量耗时测试移动法实现希尔排序移动法-大数据量耗时测试算法分析 注:学习本篇的前提是要会插入排序,数据结构与算法——排序算法-插入排...
    99+
    2024-04-02
  • 图解排序算法之希尔排序Java实现
    目录一、基本思想二、代码实现三、总结一、基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整...
    99+
    2024-04-02
  • JAVA十大排序算法之希尔排序详解
    目录希尔排序代码实现时间复杂度算法稳定性总结希尔排序 一种基于插入排序的快速的排序算法。简单插入排序对于大规模乱序数组很慢,因为元素只能一点一点地从数组的一端移动到另一端。例如,如果...
    99+
    2024-04-02
  • Java中插入排序算法之希尔排序+直接插入排序的示例分析
    这篇文章给大家分享的是有关Java中插入排序算法之希尔排序+直接插入排序的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。希尔排序在介绍希尔排序之前,先了解一下直接插入排序一、直接插入排序1. 单趟排序x插...
    99+
    2023-06-25
  • 插入排序算法之希尔排序+直接插入排序
    目录希尔排序一、直接插入排序1. 单趟排序2. 直接插入排序二、希尔排序三、测试希尔排序和直接插入排序性能希尔排序 在介绍希尔排序之前,先了解一下直接插入排序 一、直接插入排序 1....
    99+
    2024-04-02
  • c++实现排序算法之希尔排序方式
    目录排序算法之希尔排序基本思想希尔排序算法复杂度分析关于希尔排序的问题分析排序算法之希尔排序及时间复杂度分析希尔排序时间复杂度排序算法之希尔排序 基本思想 将相距某个“增...
    99+
    2024-04-02
  • C语言常见排序算法之插入排序(直接插入排序,希尔排序)
    目录前言一、直接插入排序1.1 基本思想1.2 算法思想1.3 程序实现1.4 直接插入排序的总结二、希尔排序2.1 算法思想2.2 程序实现2.3 希尔排序的特征总结前言...
    99+
    2024-04-02
  • Java 选择排序、插入排序、希尔算法实例详解
           1、基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。...
    99+
    2023-05-31
    java 选择排序 插入排序
  • Java数据结构之插入排序与希尔排序
    目录 一、正文1.排序的概念及其运用1.1排序的概念1.2排序运用1.3常见的排序算法2.插入排序算法的实现2.1插入排序二、测试代码三、结语 一、正文 1.排序...
    99+
    2023-05-14
    Java数据结构插入排序与希尔排序 数据结构插入排序 数据结构希尔排序
  • java数据结构之希尔排序
    希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:        插入排序...
    99+
    2023-05-30
    java 希尔排序 ava
  • Java实现插入排序,希尔排序和归并排序
    目录插入排序算法步骤动图演示JavaScript代码实现Python代码实现Go代码实现Java代码实现希尔排序算法步骤JavaScript代码实现python代码实现Go代码实现J...
    99+
    2022-12-22
    Java插入排序 Java希尔排序 Java归并排序 Java排序
  • java 数据结构基本算法希尔排序
    C语言数据结构基本算法希尔排序前言:基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序, 然后再用一个较小的增量(d/2)对它进行分组,在每组中再进...
    99+
    2023-05-31
    数据结构 希尔排序 ava
  • java 中基本算法之希尔排序的实例详解
    java 中基本算法之希尔排序的实例详解希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序是把记录...
    99+
    2023-05-31
    java 希尔排序 ava
  • C++如何实现希尔排序算法
    这篇“C++如何实现希尔排序算法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++如何实现希尔排序算法”文章吧。1.代码模...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作