zoukankan      html  css  js  c++  java
  • 数据结构学习--Java希尔排序

    插入排序的缺陷

    多次移动。假如很小的数据在靠右端的位置上,那么要将该数据排列到正确的位置上,则所有的中间数据都需要向右移动一位。

    特别是如果数据量大,但是某些较小的数据排在了最后面,那么移动位置将非常消耗时间。

    希尔排序的优点

    通过加大插入排序中元素之间的间隔,并对这些间隔的元素进行插入排序,从而使得数据可以大幅度的移动,当完成该间隔的排序后,

    希尔排序会减少数据的间隔进行排序,依次进行下去。

    间隔计算

    间隔h的初始值为1,通过h = 3*h + 1来计算循环,直到该间隔大于数组的大小时停止。最大值间隔为不大于数组大小的最大值。

    间隔的减少

    h = (h -1)/3

     

     第三趟排序使用插入排序即可。

     代码实现:

    package com.example.deer;

    public class ShellSort {
    public void sort(long[] arr){
    //初始化一个间隔
    int h = 1;
    //计算最大间隔
    while(h < arr.length / 3){
    h = h * 3 + 1;
    }
    while (h > 0){
    //进行插入排序
    long tmp = 0;
    for(int i = h;i < arr.length;i ++){
    tmp = arr[i];
    int j = i;
    while (j > h - 1 && arr[j - h] >= tmp){
    arr[j] = arr[j - h];
    j -= h;
    }
    arr[j] = tmp;
    }
    //减小间隔
    h = (h - 1) / 3;
    }
    }
    }
  • 相关阅读:
    React组件的生命周期
    机器人api
    智能机器人
    已复制该虚拟机 之后需要的处理工作
    在虚拟机上安装CentOS6.5(minimal)
    fastdfs
    redis安装
    FtpClient上传文件异常:java.net.SocketException: Connection reset
    redis的学习笔记
    git命令2
  • 原文地址:https://www.cnblogs.com/xiaohualu/p/11806713.html
Copyright © 2011-2022 走看看