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

【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);
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

稍微有点难度的10道java面试题,你会几道?

转载自 稍微有点难度的10道java面试题&#xff0c;你会几道&#xff1f; 1、jvm对频繁调用的方法做了哪些优化&#xff1f; 2、常见的攻击手段有哪些&#xff1f;如何防范&#xff1f; 3、restful api有哪些设计原则&#xff1f; 4、hessian是做什么用的&#xff1f;它的…

重新学习Spring一--Spring在web项目中的启动过程

1 Spring 在web项目中的启动过程 Spring简介 Spring 最简单的功能就是创建对象和管理这些对象间的依赖关系&#xff0c;实现高内聚、低耦合。&#xff08;高内聚&#xff1a;相关性很强的代码组成&#xff0c;既单一责任原则&#xff1b;低耦合&#xff1a;耦合指块间联系&…

ReviewForJob——堆排序

【0】README1&#xff09;本文旨在给出 推排序的源码实现&#xff1b;堆排序是基于二叉树的数组实现的&#xff1b;【1】堆排序步骤step1&#xff09;对排序数据建堆&#xff0c;执行 n 次 insert 操作&#xff08;基于上滤操作&#xff09;&#xff1b;每次 insert 包括 将 新…

重新学习Spring2——IOC和AOP原理彻底搞懂

一、AOP 1 Spring AOP 的实现原理 是对OOP编程方式的一种补充。翻译过来为“面向切面编程”。 1 AspectJ是静态代理的增强&#xff1a;所谓静态代理就是AOP框架会在便一阶段生成AOP代理类&#xff0c;也叫编译器增强。 2 使用Spring AOP 与AspectJ 的静态代理不同&#xff0c…

厉害了,关于String的10道经典面试题

转载自 厉害了&#xff0c;关于String的10道经典面试题 1、String是基本数据类型吗&#xff1f; 2、String是可变的话&#xff1f; 3、怎么比较两个字符串的值一样&#xff0c;怎么比较两个字符串是否同一对象&#xff1f; 4、switch中可以使用String吗&#xff1f; 5、String …

ReviewForJob——快速排序(基于插入排序)+快速选择(快速排序变体)

【0】README 0&#xff09;本文旨在给出 快速排序 的 源码实现和源码分析&#xff08;分析它的坑&#xff09;&#xff1b; 2&#xff09;要知道 在 元素个数小于10的时候&#xff0c;快速排序不如插入排序&#xff1b;注意快速排序选取枢纽元 时 所使用的方法是 三数中值分割…

Spring boot web(2):web综合开发

1 web开发 Spring boot web 开发非常简单&#xff0c;其中包括常用的 json输出、filters、property、log等 1.1 json接口开发 在以前的Spring 开发我么提供json 的做法&#xff1a; 添加jackjson 等相关jar包配置Spring controller扫描对接的方法添加ResponseBody 而在Spri…

10道腾讯的Java面试题

转载自 10道腾讯的Java面试题 下面总结10道面试腾讯的Java面试题。 1、说几种常见的攻击方式及预防手段。 2、http1.x和http2.x的区别。 3、mysql查询语句怎么做性能分析。 4、你知道哪几种排序算法&#xff1f; 5、HashMap和HashTable的区别&#xff0c;并说明其底层实现数据…

ReviewForJob——桶式排序+基数排序(==多次桶式排序)

【0】README 1&#xff09;本文旨在 给出 ReviewForJob——桶式排序基数排序&#xff08;多次桶式排序&#xff09; 的 代码实现和代码分析&#xff1b; 2&#xff09;桶式排序基础参见 http://blog.csdn.net/pacosonswjtu/article/details/49685749&#xff0c; 基数排序基…

Spring boot(3):Spring boot中Redis 的使用

Spring boot除了常用的数据库支持外&#xff0c;对nosql数据库也进行了封装自动化。 1 Redis介绍 Redis 是目前业界使用最广泛的内存数据存储。相比memcached&#xff0c; &#xff08;1&#xff09;Redis支持更丰富的数据结构&#xff0c;例如hashes&#xff0c;lists&#x…

Java List面试题汇总

转载自 Java List面试题汇总 1、你知道的List都有哪些&#xff1f; 2、List和Vector有什么区别&#xff1f; 3、List是有序的吗&#xff1f; 4、ArrayList和LinkedList的区别&#xff1f;分别用在什么场景&#xff1f; 5、ArrayList和LinkedList的底层数据结构是什么&#…

ReviewForJob——拓扑排序+最短路径算法(有权+无权)

【0】README 1&#xff09;本文旨在给出 拓扑排序最短路径算法&#xff08;有权无权&#xff09; 的源码实现 和 分析&#xff0c;内容涉及到 邻接表&#xff0c; 拓扑排序&#xff0c; 循环队列&#xff0c;无权最短路径&#xff08;广度优先搜索&#xff09;&#xff0c;有权…

Spring boot (5):Spring data jpa 的使用

总结&#xff1a; jpa是什么&#xff0c;spring data jpa是什么&#xff1f; jpa是一套规范&#xff0c;不是一套产品。jpa是一套规范&#xff0c;不是一套产品。 spring data jpa是spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架&#xff0c;提供了包括增删改等在…

Java Map集合面试题汇总

转载自 Java Map集合面试题汇总1、 你都知道哪些常用的Map集合?2、Collection集合接口和Map接口有什么关系&#xff1f;3、HashMap是线程安全的吗&#xff1f;线程安全的Map都有哪些&#xff1f;性能最好的是哪个&#xff1f;4、使用HashMap有什么性能问题吗&#xff1f;5、Ha…

ReviewForJob——二叉堆优先队列的实现(三种堆节点类型——int + struct HeapNode + struct HeapNode*)

【0】README 1&#xff09;本文旨在给出 二叉堆优先队列的实现 的代码实现和分析&#xff0c; 而堆节点类型 不外乎三种&#xff1a; 一&#xff0c; 基本类型如int&#xff1b; 二&#xff0c;结构体类型 struct HeapNode&#xff1b; 三&#xff0c;结构体指针类型 struct H…

Spring boot(六):如何优雅的使用mybatis

总结 hibernate 和 mybatis 的区别 hibernate的特点是所有的sql都用java代码生成&#xff0c;不用跳出程序去&#xff08;看&#xff09;sql&#xff0c;发展到最顶端就是Spring data jpa了。 mybatis初期使用比较麻烦&#xff0c;需要各种配置文件、实体类、dao层映射关联、还…

Java中创建String的两道面试题及详解

转载自 Java中创建String的两道面试题及详解 我们知道创建一个String类型的变量一般有以下两种方法&#xff1a; String str1 "abcd";String str2 new String("abcd"); 那么为什么会存在这两种创建方式呢&#xff0c;它们在内存中的表现形式各有什么区别…

ReviewForJob——最小生成树(prim + kruskal)源码实现和分析

【0】README 1&#xff09;本文旨在给出 ReviewForJob——最小生成树&#xff08;prim kruskal&#xff09;源码实现和分析&#xff0c; 还会对其用到的 技术 做介绍&#xff1b; 2&#xff09;最小生成树是对无向图而言的&#xff1a;一个无向图G 的最小生成树是一个连通图…

Spring boot(七):Spring boot+ mybatis 多数据源最简解决方案

多数据源一般解决哪些问题&#xff1f;主从模式或者业务比较复杂需要连接不同的分库来支持业务。 直接上代码。 配置文件 pom包依赖&#xff0c;该依赖的依赖。主要是数据库这边的配置&#xff1a; mybatis.config-locationsclasspath:mybatis/mybatis-config.xmlspring.da…

Java:关于main方法的10道面试题

转载自 Java&#xff1a;关于main方法的10道面试题 1.main方法是做什么用的&#xff1f; 2.不用main方法如何运行一个类&#xff1f; 3.main方法如何传递参数&#xff1f;传递参数的类型是什么&#xff1f;能不能改变该参数类型&#xff1f; 4.main方法为什么是静态的&#xff…