zoukankan      html  css  js  c++  java
  • 希尔排序

    此排序包括升序和降序

    以升序为例,先设比较大的步长进行插入排序,然后步长逐步减少,最后保证步长为1的一次插入排序即可

    请参考插入排序排序接口与抽象类(java)

    package com.bsc.algorithm.sort.shell;
    
    import com.bsc.algorithm.sort.insert.InsertSort;
    
    /**
     * 希尔排序
     * 
     * @author bsc
     *
     */
    public class ShellSort<T extends Comparable<T>> extends InsertSort<T> {
        protected void sort(T[] data, int cr) {
            int length = data.length;
            //初始步长为数组长度的一半
            int increment = length / 2;
            while (increment > 0) {
                //进行插入排序
                sort(data, cr, increment);
                //步长每次减少一半(保证最后一次排序步长为1)
                increment = increment / 2;
            }
        }
    }

     测试

    ArrayGenerator请参考数组数据生成器

    package com.bsc.algorithm.sort.test;
    
    import java.util.Arrays;
    
    import com.bsc.algorithm.data.generator.ArrayGenerator;
    import com.bsc.algorithm.sort.inf.ISort;
    import com.bsc.algorithm.sort.shell.ShellSort;
    
    public class SortTest {
    
        public static void main(String[] args) {
            ISort<Integer> sortInt = new ShellSort<Integer>();
    
            Integer[] dataInt = ArrayGenerator.random(Integer[].class, 10, 0, 99);
            System.out.println("原序:" + Arrays.toString(dataInt));
            sortInt.sortAsc(dataInt);
            System.out.println("升序:" + Arrays.toString(dataInt) + "
    ");
    
            dataInt = ArrayGenerator.random(Integer[].class, 10, 0, 99);
            System.out.println("原序:" + Arrays.toString(dataInt));
            sortInt.sortDesc(dataInt);
            System.out.println("降序:" + Arrays.toString(dataInt) + "
    ");
    
            ISort<Character> sortChar = new ShellSort<Character>();
    
            Character[] dataChar = ArrayGenerator.random(Character[].class, 10, 65, 90);
            System.out.println("原序:" + Arrays.toString(dataChar));
            sortChar.sortAsc(dataChar);
            System.out.println("升序:" + Arrays.toString(dataChar) + "
    ");
    
            dataChar = ArrayGenerator.random(Character[].class, 10, 65, 90);
            System.out.println("原序:" + Arrays.toString(dataChar));
            sortChar.sortDesc(dataChar);
            System.out.println("降序:" + Arrays.toString(dataChar) + "
    ");
        }
    }
  • 相关阅读:
    测测两人的关系.一个小程序,根据用户输入的名字得到笔画数!
    手把手教你做下拉菜单篇
    防止网页内容被复制的最佳方法!
    陈寿福被抓所思二三事!
    测测两人的关系.一个小程序,根据用户输入的名字得到笔画数!
    树状数组
    scanf和cin
    二分答案
    赛后总结
    更新ssl证书后 file_get_contents()方法失效
  • 原文地址:https://www.cnblogs.com/bsc2012/p/9212485.html
Copyright © 2011-2022 走看看