zoukankan      html  css  js  c++  java
  • java 算法基础之七希尔排序

    希尔排序是插入排序的一种类型,也可以用一个形象的叫法缩小增量法。基本思想就是把一个数组分为好几个数组,有点像分治法,不过这里的划分是用一个常量d来控制。

    这个0<d<n,n为数组的长度。这个算法有了插入排序的速度,也可以算是一个改进算法,在插入算法中,如果有一个最小的数在数组的最后面,用插入算法就会重最后一个

    位置移动到第一个,这样就会浪费很大,使用这个改进的希尔排序可以实现数据元素的大跨度的移动。也就是这个算法的优越之处。

    希尔排序过程图解:

    数组:45,20,80,40,26,58,66,70

    d=5时   分组为:45,58

                   20,66

            80,70

    排完后为: 45,20,70,40,26,58,66,80

    d=3时 分组为:45,40,66

           20,26,80

           70,58

             40,66

             26,80

    排完后为:40,20,58,45,26,70,66,80

    d=1时 分组为:40,20,58,45,26,70,66,80

    排序后直接得到结果:

    20 26 40 45 58 66 70 80

    实现的代码如下:

    class Shell 
    {
        public void shell_sort(int [] arrays){
            for(int d=5;d>0;d=d-2){
                for(int c=0;c<arrays.length-d;c++){
                    for(int i=c;i<arrays.length;i=i+d){
                        for(int j=i;j>0;j=j-d){
                            if(j<d)
                                break;
                            if(arrays[j]<arrays[j-d]){
                                int tmp;
                                tmp=arrays[j];
                                arrays[j]=arrays[j-d];
                                arrays[j-d]=tmp;
    
                            }
                        }
                    }
                    
                }
                snp(arrays);
            }
            
        }
        public void snp(int[] arrays){
            for(int i=0;i<arrays.length;i++){
                System.out.print(arrays[i]+" ");
    
            }
            System.out.println();
        }
        public static void main(String[] args) 
        {
            Shell s=new Shell();
            int[] a={45,20,80,40,26,58,66,70};
            s.shell_sort(a);
    
        }
    }

    运行结果:

    ---------- java ----------
    45 20 70 40 26 58 66 80 
    40 20 58 45 26 70 66 80 
    20 26 40 45 58 66 70 80 
    
    输出完成 (耗时 0 秒) - 正常终止
    找一个博客做自己的女朋友,不管你跟她说什么她都帮你记录,这是多么幸福的一件事啊。如果有女生能做到这点,赶尽娶回家吧!
  • 相关阅读:
    Linux下查看系统版本号信息的方法(转载)
    tomcat 启动超级慢
    新生代老年代GC组合
    GC 提前晋升
    Mysql 锁技术要点【转载】
    第39天:字符串连接、截取操作
    第38天:运算符、字符串对象常用方法
    第37天:小米手机图片展示
    第36天:倒计时:发动短信验证、跳转页面、关闭广告
    第35天:时钟效果
  • 原文地址:https://www.cnblogs.com/hexiaochun/p/2679583.html
Copyright © 2011-2022 走看看