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

    希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。

    该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。

     

    希尔排序是一种特殊的插入排序 , 在插入排序的算法上引入分组的概念

    代码兑现 

    class shellOrder:order
        {
            private int[] a = null;
            private int gap,local,temp;  //每间隔gap个元素分成一组
            public shellOrder(int[] a)
            {
                this.a = a;
                gap = a.Length;
            }
            public int[] orderBy()
            {
                do 
                {
                    gap = gap / 3+1;//2345 都可以 gap=1 就相当于插入排序 ,/3 平均收敛效果最佳,改变分组条件
                    for (int i = gap; i < a.Length;i+=gap )   //n组同时进行插入排序
                        local=i;
                        temp=a[local];
                        for (int j = i - gap; (j >=0) && (a[j] > temp);j-=gap )  //注意这里 ,希尔排序 每组的插入排序是同时进行的,不是一组插入完成,在进行另一组!!!
                        {
                            a[j + gap] = a[j];
                            local = j;
                        }
                        a[local] = temp;  //插入操作
                    }
                } while (gap>1);
                return a;
            }
        }
  • 相关阅读:
    高效沟通
    Oracle播放多条 INSERT ALL
    oracle的同义词总结
    Brute force Attack
    爱因斯坦方程与小黑洞
    dom 编程(html和xml)
    dexposed框架Android在线热修复
    从微软小冰看微软运营手段的转型
    剑指offer_面试题_从上往下打印二叉树
    外面的wifi非常精彩,外面的wifi非常不安
  • 原文地址:https://www.cnblogs.com/wangjian920110/p/5526296.html
Copyright © 2011-2022 走看看