• 算法大神之路----排序(希尔排序法)


    希尔排序法,是D.L.Shell在1959年7月发明的一种排序法.

    原理上,有点像插入排序法,但它可以减少数据搬移的次数.排序的原则是将数据分成特定间隔的几个小区块,以插入排序法拍完区块内的数据,再渐渐减少间隔的距离.

    算法分析:

    • 任何情况下,时间复杂度均为O(n3/2).
    • 希尔排序法和插入排序法一样,都是稳定排序
    • 只需要一个额外的空间,所以空间复杂度最佳
    • 此排序法适用于数据大部分都已经排序完成的情况
    import java.util.Random;
    
    /**
     * 算法大神之路----排序(希尔排序法)
     */
    public class Study04 {
    
        public static void main(String[] args) {
    
            //新建一个数组
            int[] arr = new int[20];
            Random r = new Random();
            for (int i = 0; i < arr.length; i++) {
            //使用随机数给数组赋值
                arr[i] = r.nextInt(50);
            }
            System.out.print("原数组为:");
            paint(arr);
            System.out.println("-----排序-----");
    
            int i;//扫描次数
            int j;//以j来定为比较元素
            int k=1;
            int tmp;//用k来暂存数据
            int jmp;//jmp用来设定间隔的位移量
            jmp=arr.length/2;
            while (jmp!=0){
    
                for (i = jmp; i <arr.length ; i++) {
    
                    tmp=arr[i];
                    j=i-jmp;
                    while (j>=0&&tmp<arr[j]){
                        arr[j+jmp]=arr[j];
                        j=j-jmp;
                    }
                    arr[jmp+j]=tmp;
                }
                System.out.print("第"+(k++)+"次排序");
                paint(arr);
                jmp=jmp/2;
            }
    
            System.out.print("排序结束后,数组为:");
            paint(arr);
        }
    
        //遍历打印出数组的数据
        public static void paint(int[] arr){
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]+"	");
            }
            System.out.println();
        }
    
    }

    控制台输出语句:

    image

  • 相关阅读:
    AIX6.1 线程模型说明
    多线程专题之线程死锁原因之谜
    多线程执行顺序诡异现象谈,你不知道的pthread_create
    SOA体系结构基础培训教程-规范标准篇
    C# AES要解密的数据的长度无效
    winform命名规范
    winform 打开一个窗体,关闭一个窗体
    VS2017专业版和企业版激活密钥
    AES五种加密模式
    c#POST请求php接口
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7368549.html
Copyright © 2020-2023  润新知