希尔排序可以说是插入排序的加强版,通过对原始数据进行分组再排序,更高效地完成对数据的排序工作。 1.从插入排序到希尔排序 回顾插入排序的基本知识,插入排序通过不断将无序的元素插入到已排序的序列中,直到所有的元素都已经插入位置。 插入排序一个很明显的缺点是插入元素时需要与已经排序的元素进行 ...
基本思想: 希尔排序的实质就是分组插入排序,又称缩小增量法。 将整个无序序列分割成若干个子序列 由相隔某个 增量 的元素组成的 分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序。 因为直接插入排序在元素基本有序的情况下,效率是很高的,因此希尔排序在时间效率上有很大提高。 实例: 无序序列:int a , , , , , , , 第一 ...
2017-01-10 11:38 0 4315 推荐指数:
希尔排序可以说是插入排序的加强版,通过对原始数据进行分组再排序,更高效地完成对数据的排序工作。 1.从插入排序到希尔排序 回顾插入排序的基本知识,插入排序通过不断将无序的元素插入到已排序的序列中,直到所有的元素都已经插入位置。 插入排序一个很明显的缺点是插入元素时需要与已经排序的元素进行 ...
希尔排序严格来说是基于插入排序的思想,又被称为缩小增量排序。 具体流程如下: 1、将包含n个元素的数组,分成n/2个数组序列,第一个数据和第n/2+1个数据为一对... 2、对每对数据进行比较和交换,排好顺序; 3、然后分成n/4个数组序列 ...
希尔排序(Shell Sort)是插入排序的一种,是针对直接插入排序算法的改进,是将整个无序列分割成若干小的子序列分别进行插入排序,希尔排序并不稳定。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 一、基本思想 先取一个小于n的整数d1作为第一个增量,把文件的全部 ...
华杰让我看了一道面试题:现有一段程序S,可以对任意n个数进行排序。如果现在需要对n^2个数进行排序,最少需要调用S多少次?(只允许调用S,不可以做别的操作)。 看到了这个,我想试试希尔排序,就学学。 一.理论准备 希尔排序是基于直接插入排序 ...
上篇blog中介绍的直接插入排序,希尔排序就是对直接插入排序的一个优化。比如有这么一种情况:对一个无序数组进行从小到大的排序,但是数组的最后一个位置的数是最小的,我们要把它挪到第一个位置,其他位置的都要往后移动,要是这个数组非常大,那么直接插入排序的开销就非常大。 现在有一个 ...
一、排序思想 希尔排序(Shell’s Sort)是插入排序的一种,是直接插入排序算法的一种更高版本的改进版本。 把记录按步长gap分组,对每组记录采用直接插入排序方法进行排序; 随着步长逐渐减小,所分成的组包含的记录越来越多;当步长值减小到1时,整个数据合成 ...
虽然现在各种程序语言都有其各自强大的排序库函数,但是这些底层实现也都是利用这些基础或高级的排序算法。 理解这些复杂的排序算法还是很有意思的,体会这些排序算法的精妙~ 一、希尔排序(shell sort):希尔排序是基于插入排序的,区别在于插入排序是相邻的一个个比较(类似于希尔中h ...
,用插入算法就会重最后一个 位置移动到第一个,这样就会浪费很大,使用这个改进的希尔排序可以实现数据元 ...