• 排序算法-(4)-希尔排序


    排序思想:
    先将序列分成较多个子序列分别进行排序,再分成较少个子序列分别进行排序,直到最后为一个序列排序。
    1. 每隔固定距离选取一个数的方法划分子序。其中间隔距离称为增量。每次子序都排好后,增量减半,增量减少意味着子序数减少,直到增量为1,便是全部的数序了,希尔排序完成。
    2. 子序列使用插入排序

    实现步骤:
    选择序列中的某个元素a作为分割标准,那么将序列中小于a的元素放在a的左边,大于a的元素放在右边,然后对两边的序列迭代下去。

    时间复杂度:
    希尔排序的算法复杂度分析可类比快速排序,一般认为希尔排序时间复杂度为:O(nlogn)。

    空间复杂度
    希尔排序的空间复杂度显然为O(1),仅仅需要一个交换变量。相比快速排序递归调用产生的巨大栈消耗,希尔排序O(1)的空间消耗显得十分让人惊喜。

        void ShellSort(int Array[],int n){
            int d=n/2;                   //设置起始增量
            while(d >= 1)
            {               //增量为1时排序结束
                for(int k=0;k<d;k++)
                {    //遍历所有的子序
                    for(int i=k+d;i<n;i+=d)
                    {  //对每个子序进行插入排序
                        int temp=Array[i];   //插入排序算法参见链接
                        int j=i-d;
                        while(j>=k && Array[j]>temp)
                        {
                            Array[j+d]=Array[j];
                            j=j-d;
                        }
                        Array[j+d]=temp;
                    }
                }
                d=d/2;                   //缩小增量
            }
        }
    
  • 相关阅读:
    web.config中的customErrors标记的用法
    算法系列15天速成[索引]
    log4net的简单使用
    Cookie帮助类
    ASPxTreeList及ASPxGridView使用
    javascript获取页面中的位置
    如何部署windows服务?
    基于T4模板引擎生成静态网站(CMS)
    SqlServer实现递归查询
    安卓(AndRoid)开发环境搭建之HelloWord
  • 原文地址:https://www.cnblogs.com/tigerson/p/7151738.html
Copyright © 2020-2023  润新知