zoukankan      html  css  js  c++  java
  • 【经典算法】第四回:希尔排序

    1.概述

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

    原理:先将序列分割成若干个子序列(由相隔某个“增量”的 元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。插入排序在元素基本有序的情况下,效率会更高,因此先分组,再插入排序,再组装,已达到序列基本有序,所以希尔排序在时间效率上比插入排序有较大提高,时间复杂度为O(n3/2)。

    2.示例

            //希尔排序
            public static void ShellSort(int[] nums)
            {
                //取步长
                int step = nums.Length / 2;
    
                while (step >= 1)
                {
                    for (int i = step; i < nums.Length; i++)
                    {
                        var temp = nums[i];
                        int j;
    
                        for (j = i - step; j >= 0 && temp < nums[j]; j = j - step)
                        {
                            nums[j + step] = nums[j];
                        }
    
                        nums[j + step] = temp;
                    }
    
                    step = step / 2;
                }
            }
            //    int[] list = new[] { 4, 1, 2, 7, 9, 0, 8 };
            //    Sorter.ShellSort(list);

    作者:Qlin
    出处:http://www.cnblogs.com/qqlin/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    struts2之拦截器
    JavaWeb开发之HttpServletResponse
    JavaWeb开发之Servlet
    HTTP协议详解
    字符串
    数组
    第一个只出现一次的字符
    DDoS的类型及原理
    引用变量&和指针*的区别
    赋值运算符的重载
  • 原文地址:https://www.cnblogs.com/qqlin/p/2933104.html
Copyright © 2011-2022 走看看