zoukankan      html  css  js  c++  java
  • java排序算法(八):希尔排序(shell排序)

    java排序算法(八):希尔排序(shell排序)

      希尔排序(缩小增量法属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而使数据项大跨度的移动。当着写数据项拍过一趟序之后,希尔排序算法缩小数据项的间隔再进行排序,一次进行下去。进行这些排序时的数据项直接的间隔被称为增量,习惯上用字母h来表示增量

      常用的h序列有Knuth提出,该序列从1开始,通过如下公式产生

      h=3*h+1;

      反过来程序需要反向计算h的值

      h = h-1/3

    代码实现

      

    package com.spring.test;
    
    /**
     * 希尔排序
     */
    public class ShellSortTest {
        public static int count = 0;
        public static void main(String[] args) {
            int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
            print(data);
            shellSort(data);
            System.out.println("排序后的结果");
            print(data);
        }
    
        /**
         * 希尔排序
         * @param data
         */
        public static void shellSort(int[] data){
            //计算出最大的h值
            int h = 1;
            while(h < data.length/3){
                h = h*3+1;
            }
            while(h > 0){
                for(int i = h;i<data.length;i+=h){
                    if(data[i] < data[i-h]){
                        int tmp = data[i];
                        int j = i-h;
                        while(j >=0 && data[j] >tmp){
                            data[j+h] =data[j];
                            j-=h;
                        }
                        data[j+h] = tmp;
                        print(data);
                    }
                }
                // 计算出下一个h值
                h = (h - 1) / 3;
            }
        }
    
        /**
         * 打印输出
         */
        public static void print(int[] data){
            for(int i=0;i<data.length;i++){
                System.out.print(data[i]+"	");
            }
            System.out.println();
        }
    }

    运算结果

  • 相关阅读:
    安装原版Win8.1并激活
    Java8 List<对象> 转 Set、Map(高级)、排序、分组、统计
    SpringCloud第二弹(高可用Eureka+Ribbon负载均衡)
    SpringCloud第一弹(入门)
    SpringBoot+Shiro+Redis共享Session入门小栗子
    Go语言(IDEA下+Eclipse下)Hello World
    Linux学习杂谈
    小孩儿才分对错,成年人只看利弊
    Xshell5
    91 Testing MySQL学习总结
  • 原文地址:https://www.cnblogs.com/hanxue112253/p/8474265.html
Copyright © 2011-2022 走看看