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

    希尔排序是对插入排序的一种优化

    插入排序是每个元素依次插入有序数组中

    如果比有序数组的最大值大就依次向前比较

    而希尔排序则是将数组分组

    首先确定一个增量,这里我取得增量是数组长度的一半

    将数组元素中距离为增量的各个元素分成一组,进行插入排序

    然后增量变成原来一半,重新分组,进行插入排序

    直到增量变为1,进行最后一次插入排序。

     

    这样做的好处是可以将元素进行大幅度的移动

    因为正常的插入排序每个元素只能一个一个的移动

    这里由于分组了,元素的移动是按照增量数移动的

    所以提高了效率

    下面是希尔排序的代码

    void ShellSort(int* arr,int nlength)
    {
        int len = nlength;
        do
        {
            //计算增量进行分组
            len = len/2;
            //增量是几就有几组,循环进行插入排序
            for(int i=0;i<len;i++)
            {
                int j;        //无序的第一个元素
                int k;       //有序的最后一个元素
                int temp;    //标记无序第一个元素的值
                for(j = i + len;j < nlength;j += len)
                {
                    temp = arr[j];
                    k = j-len;
                    while(temp < arr[k] && k >= 0)
                    {
                        arr[k+len] = arr[k];
                        k -= len;
                    }
    
                    arr[k+len] = temp;
    
                }
            }
        }while(len != 1);    
  • 相关阅读:
    mysql
    MySQL主从同步
    python与各数据库的交互
    snmptrap
    web场景的监控
    zabbix的历史数据存储到elasticsearch中
    使用PopupWindow的实现步骤
    使用PopupWindow的实现步骤
    ListView及其ArrayAdapter的应用
    ListView及其ArrayAdapter的应用
  • 原文地址:https://www.cnblogs.com/TheQi/p/9115163.html
Copyright © 2011-2022 走看看