zoukankan      html  css  js  c++  java
  • 算法大神之路----排序(希尔排序法)

    希尔排序法,是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

  • 相关阅读:
    单片机编程积累算法
    关于GSM基站定位
    GSM模块fibocom G510使用记录
    指爱 打字比赛记录
    硬件和软件工程师
    GPS模块启动模式说明
    阻容降压电路分析
    饮水机电路-工作剖析
    跑步,去
    day01 IT知识架构,操作系统简介
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7368549.html
Copyright © 2011-2022 走看看