• C / C++算法学习笔记(8)-SHELL排序


    原始地址: C / C++算法学习笔记(8)-SHELL排序

     

    基本思想
    先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<;…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
    该方法实质上是一种分组插入方法
    算法编码
    void shellSort(int v[], int n)
    {
    	int gap, i, j, temp;
    	for(gap = n / 2;gap > 0;gap /= 2) //设定步长
    	{
    		for(i = gap;i < n;++i) //在元素间移动为止
    		{
    			for(j = i-gap; j >= 0&&v[j] > v[j+gap]; j -= gap)
    			{
    				//比较相距gap的元素,逆序互换
    				temp = v[j];
    				v[j] = v[j+gap];
    				v[j+gap] = temp;
    			}
    		}
    	}
    }


    1.首先设定gap = n/2 = 4于是分组
    32
    34  -> 3234
    43
    8    ->  8 43
    56
    54  -> 5456
    99
    76  -> 7699
    数列变成 328547634435699

    2.gap = gap/2 = 2
    于是分组
    32
    543456 -> 32345456
    8
    764399    -> 8437699
    于是数列变成 328344354765699

    3.gap = gap/2 = 1
    于是分组
    32
    8344354765699

    ->

    832344354567699
    gap=1
    结束……


     

  • 相关阅读:
    给数据库带来的挑战
    微服务vs传统开发
    服务拆分原则
    架构演化的步骤
    如何进行微服务架构演进
    为什么选择使用Spring Cloud而放弃了Dubbo
    Spring Cloud体系介绍
    Spring Cloud都做了哪些事
    什么是Spring Boot
    微服务架构优势
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3310515.html
Copyright © 2020-2023  润新知