【0】README

0)希尔排序是基于插入排序的。将插入排序算法 内for循环中的所有 1 改为增量就可以。。bingo。。 插入排序源码

1)本文旨在给出 希尔排序(缩小增量排序)之塞奇威克增量序列 的源码实现;

2)为什么要求 塞奇威克增量序列?  

reason1)要知道, 塞奇威克 提出了几种增量序列,最坏运行时间为 O(N^4/3),平均运行时间为 O(N^7/6); 其提出的增量序列中的最好序列是 {1, 5, 19, 41, 109, ......},该序列中的项或者是 9*4^i - 9*2^i + 1 或者是 4^i  - 3*2^i + 1;

reason2)基于塞奇威克增量序列的希尔排序(缩小增量排序) 要 快于 花费 O(NlogN) 的 堆排序;

3)本文末会给出 基于 塞奇威克增量序列 的 希尔排序源码实现,希尔排序的基础知识参见 

http://blog.csdn.net/pacosonswjtu/article/details/49660799


【1】下面给出求塞奇威克增量序列 的 分析和源码实现

1)分析


2)源码如下

#include <stdio.h>
#include <math.h>
// 对增量序列赋值 和 找出所需要的最大轮数.
// 如 Rebort Sedgewick(罗伯特·塞奇威克) 提出的 increment = 9*4^i - 9*2^i +1  或 increment = 4^i - 3*2^i +1;
// incrementSeq[] 起点从 0 开始.
int incrementSeqFunc(int* incrementSeq, int length)
{   int i, startup1 =0 , startup2 = 2;for(i=0; i<length; i++){if(i%2==0){incrementSeq[i] = 9*pow(4, startup1) - 9*pow(2, startup1) +1;startup1++;}else{incrementSeq[i] = pow(4, startup2) - 3*pow(2, startup2) +1;startup2++;}if(incrementSeq[i] >= length){break;}}return i; // 排序轮数,每轮都使用(比上一轮)缩小的增量序列
}void printArray(int data[], int size)
{int i;for(i = 0; i < size; i++)printf("%d ", data[i]);printf("\n");
}
#include "p167_shell_sort.h"int main()
{   int incrementSeq[255];  int length = 600;int round;round = incrementSeqFunc(incrementSeq, length);printArray(incrementSeq, round);
}

3)打印结果



【2】基于塞奇威克增量序列 的 希尔排序源码

Attention)you can also checkout the source code from https://github.com/pacosonTang/dataStructure-algorithmAnalysis/tree/master/chapter7/review/p167_shell_sort 

void shell_sort(int* array, int length)
{   int incrementSeq[255]; // 增量序列(startup == 0).int i, j, round=incrementSeqFunc(incrementSeq, length);int increment, temp;for(; round>=1; round--){increment = incrementSeq[round-1];for(i=1*increment; i<length; i+=increment) // 默认地,array[0*increment]有序,所以从1*increment开始.{temp = array[i]; // 第1个无序成员.for(j=i-increment; j>=0; j-=increment) // j 在有序部分进行滑动.{if(temp < array[j]){array[j+increment] = array[j];}else{break;}}array[j+increment] = temp;}}
}
#include "p167_shell_sort.h"int main()
{       int array[] = {100, 1000, 100, 10, 6, 2, 19, 25, 15, 55, 35, 5, 110, 120, 119};int length = 15;   shell_sort(array, length);printArray(array, length);
}

ReviewForJob——希尔排序(缩小增量排序)之塞奇威克增量序列相关推荐

  1. 数据结构之插入排序:希尔排序(缩小增量排序)

    排序算法:希尔排序.缩小增量排序 思维导图: 希尔排序的定义: 例: 希尔排序d的选取: 希尔排序的代码实现: 希尔排序的性能: 思维导图: 希尔排序的定义: 普通的插入算法正序时时间复杂度会很小,但 ...

  2. 排序算法之希尔排序(缩小增量排序)

    前面两篇介绍了两个非常简单又非常基础的算法--选择排序和插入排序,并通过一篇关于大乐透的小应用程序介绍了插入排序的一个简单应用.本篇介绍一个基于插入排序算法的.快速的排序算法--希尔排序.同样,本篇主 ...

  3. Java八大排序算法之希尔排序(最小增量排序)算法

    希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出而得名. ------- ...

  4. java算法----排序----(6)希尔排序(最小增量排序)

    1 package log; 2 3 public class Test4 { 4 5 /** 6 * java算法---希尔排序(最小增量排序) 7 * 8 * @param args 9 */ 1 ...

  5. 排序算法(四)--谢尔排序(缩小增量排序)

    由上一篇博文可知,冒泡排序时,若待排序序列长度为n,则冒泡排序法时间复杂度为O(n2).但若待排序序列已经按值有序,则其时间复杂度变为O(n).由此推想,若待排序序列按值"基本有序" ...

  6. 八十五、再探希尔排序,桶排序,计数排序和基数排序

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 关于排序,其实还有很多,比如常见的希尔排序,桶排序,计数排序和基数排 ...

  7. python实现希尔排序算法_排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)...

    其实本文叫排序算法总结有点过了,只是用python实现了一遍.本文都是参照一篇csdn博客<数据结构排序算法>,里面详细介绍每种排序算法的原理,并给出了C++的实现,再次膜拜. # -*- ...

  8. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  9. 希尔排序是一种稳定的排序算法_排序算法—希尔排序

    希尔排序 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n ...

最新文章

  1. Python爬取B站5000条视频,揭秘为何千万人为它流泪
  2. C++里如何使用功能键(F1、F2·····)进行操纵?
  3. Emacs+hideif.el 隐藏预编译代码(或彩色显示预编译代码)
  4. 转转集团:二手市场iPhone12夺5G销冠 华为Mate40 Pro最保值
  5. mount挂载光盘media_Linux挂载光盘命令
  6. Informix常用操作方法命令
  7. [转载] ANTLR——语法分析
  8. 什么是CDN加速技术?网站用CDN有什么好处
  9. 一学就会的 WordPress 实战课
  10. “似水无形” 的小程序化
  11. 《基于Vue实战打造抖音WebApp》
  12. 区块链:雷电网络开发预览版
  13. GPS问题调试—MobileLog中有关GPS关键LOG的释义
  14. 用计算机画有常数的函数图像,信息技术应用 用计算机画函数图象教学实录及点评...
  15. MapReduce关系代数运算——差
  16. 二分图的判定最大匹配
  17. C++中的new和delete运算符(内存管理)
  18. PAT 基础编程题 7-2 然后是几点 (15 分)
  19. Reflex WMS入门系列三十二:导出到Excel
  20. 差分隐私理论入门科普

热门文章

  1. CF1158D. Beautiful Array
  2. [CQOI]九连环(FFT优化+高精)
  3. 选数游戏(ybtoj-二叉堆)
  4. AGC002(D~F)【Kruskal重构树,博弈论,dp】
  5. P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】
  6. I. Space Station(hash记忆化+dp)
  7. 【树形DP】路径计数机(nowcoder 1103-B)
  8. 【Trie】【费用流】管道监控(loj 3026)
  9. 【点分治】Tree(luogu 4178/金牌导航 点分治-1)
  10. K8S Learning(7)—— Deployment