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

快速理解并学会希尔排序

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

快速理解并学会希尔排序

希尔排序

文章目录
  • 希尔排序
  • 前言
  • 一、希尔排序原理
  • 二、代码演示
    • 1.方法
    • 2.测试
    • 3.结果


前言

提示:了解希尔排序前必须先理解插入排序的原理,希尔排序是一种以插入排序为基础的排序,相当于插入排序的plus版本 。

插入排序:从第二个元素开始,和前面的元素依次进行比较,如果小于前面的元素则将前面的元素移到后面,直到碰见比它小的,最后将目标元素放到比它小的元素的前一个元素。

提示:希尔排序内部不要理解为交换元素(注意理解原理),而是插入排序,将目标元素放到合适是位置上!

一、希尔排序原理

第一次排序,步长为arr.length/2,将元素以步长进行分组,对这些组内元素进行插入排序(不是一个组的不管!!!)
第二次排序,步长为arr.length/2/2,再将元素以步长进行分组,对这些组内元素进行插入排序
…
最后一次排序,步长为1,相当于一次插入排序(由于前面的操作,大大减少了这次插入排序工作量)

二、代码演示 1.方法

注意看 j 的变换

public static void sheel(int [] arr){
        int gap=arr.length/2;//起始步长为arr.length/2,
        int j ;
        while(gap>0){

        for(int i=gap;i//插入排序代码调整
                int value=arr[i];
                for( j=i-gap;j>=0;j=j-gap) {
 //从插入位置先前,遇见比value大的,就依次将前面的向后移动,否则结束循环
                    if (value < arr[j])
                        arr[j + gap] = arr[j];
                    else break;
                }
            arr[j + gap] = value;//将value放到合适的位置
            }
            gap=gap/2;//每一次大循环步长整除2
        }

    }
2.测试
public static void main(String[] args) {
        //测试代码
        int arr[]={2,4,2,43,22,55};
        sheel(arr);//希尔排序
        for(int p:arr)
            System.out.println(p);
    }
3.结果

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

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

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