算法五:希尔排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法五:希尔排序相关的知识,希望对你有一定的参考价值。

希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量技术分享=1(技术分享<技术分享…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。

1.就是先确定步长,按照步长(leng/2)将数组分开,把每个子序列插入排序,10个元素,按照步长为5可以分为5组

2.将步长在缩短5/2 = 2;再进行插入排序

3.在将步长缩短2/2 = 1 一个一组

待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序

#include <iostream>

using namespace std;

void shellSort(int a[],int num)
{
      for(int gap = num/2;gap >0;gap/=2)
      {
            for(int i = gap; i < num;i++)
            {
                  int key = a[i];
                  int j = i - gap;
                  for(;j>=0&&temp>a[j];j-=gap)
                         a[j+gap] = a[j];
                  a[j+gap] = temp;                   
            }
      }   
}

int main()
{
     int a[] = {3,1,2,6,9};
     shellSort(a,4);
     for(int i =0;i< 5;i++)
          pritf("%d   ",a[i]);
     cin.get();
}        

 

以上是关于算法五:希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

排序五:希尔排序

七大排序算法(插排,希尔,选择排序,堆排,冒泡,快排,归并)--图文详解

八大排序算法C语言过程图解+代码实现(插入,希尔,选择,堆排,冒泡,快排,归并,计数)

《算法零基础100例》(第41例) 进阶排序 - 希尔排序

《画解数据结构》「希尔排序」算法教程

视频动画 | 什么是希尔排序?