栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

插入排序,希尔排序笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

插入排序,希尔排序笔记

  先了解插入排序,再说希尔排序,因为希尔排序是改进版的插入排序。
  那插入排序的思想是什么样的呢?插入排序的思想跟我们平常生活中的思想是一样的,假设你前面有三张牌,1,2,5,当然,都是有序的,那么,此时你手里也拿着一张牌,为3,那么怎么插入到前面的三张牌里呢?其实,我们的大脑不自觉的就会拿我们手里的3先跟5进行比较,3比5小,所以,3跟5要交换位置,然后3再跟2比,3比2大,那就不用交换,也不用再比下去了。这就是插入排序的思想。
  给个定义吧(按照我原话复述):先把数组的第1个数当成是已经排好序的区间,那剩下的就是从第2个数开始往后就是未排好序的区间,也就是数组此时被分成有序和无序两个区间,然后怎么做呢?就是先以无序区间里的第一个数跟有序区间的最后一个数相比,比它小,就交换位置,依次这样比下去,直到找到合适的位置,形成一个新的有序区间,那么与原来相比,有序区间就多了一个成员,无序区间就少了一个成员,后面的以此类推。
  以数组为5,2,3,1,9为例,按照以上说法,5会先被当做有序区间,剩下的2,3,1,9就被当做无序区间,然后再以无序区间为准,先从第一个数开始,也就是2,对有序区间的最后一个数依次向前比较,那么2跟5比,比5小,是不是就要交换位置呀,那就会变成2,5,3,1,9,再往前还有得比吗?没有了,没有的话第一轮结束,新的有序区间就是2,5,无序区间就是3,1,9,到第二轮,还是一样,先拿无序区间的第一个数3跟有序区间的最后一个数依次往前比较,直到找到合适的位置形成新的有序区间,以此类推,我就不再重复叙述了。
  接下来看代码,如下:

public static void main(String[] args) {
    int[] ins = {4,2,6,1,5,8};
    //先从索引为1的位置开始,每次循环,代表一轮结束
    for(int i=1; i0; j--){
            //符合条件的要交换位置
            if(ins[j] 

  以上就是插入排序的实现,接下来看希尔排序,前面我也说了,希尔排序是改进版的插入排序,那么希尔排序的思想是怎么样的呢?一句话,分步思想。什么意思?还是以数组为5,2,3,1,9为例,该数组的长度为5,那么我就让数组的长度除以2,得到2,那么也就是说,步数为2,可以拿插入排序来理解,像插入排序步数就为1,也就是要跟我前一个数进行依次比较,那2是不是就要跟我前第二个数进行依次比较呀!如下图:
  代码如下:

public static void main(String[] args) {
    int[] ins = {5,2,3,1,9};
    for(int step=ins.length/2;step>0;step/=2){
        for(int i=step; i=step; j-=step){
                if(ins[j] 

  以上代码就是我由插入排序改造而来的希尔排序,细品,debug一下就知道了,我也不好每个代码都做个解释,但可以画个图,如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/281339.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号