是插入排序经过改进之后的高效版本,也称缩小增量排序。1959 年提出,是突破时间复杂度 O(n2) 的第一批算法之一。缩小增量排序的最优增量选择是一个数学难题,一般采用希尔建议的增量,具体如下。 思路与步骤:首次选择的增量(即步长,下同) step = 数组长度 / 2 取整;缩小增量step ,每次减半,直到为 1 结束缩小;逐渐缩小的增量组成一个序列:[n/2, n/2/2, ... 1]对数
原创
2021-01-15 12:44:37
498阅读
1、举例说明 定义增量序列DM > DM-1 > … > D1 = 1 对每个Dk进行“Dk间隔”排序( k = M, M-1, … 1 )注意:“Dk间隔”有序的序列,在执行“Dk-1间隔”排序后,仍然是“Dk间隔”有序的2、原始希尔排序DM = [N/2] , Dk = [Dk+1/2]#include<iostream>using n
原创
2021-07-12 16:17:34
678阅读
#include<cstdio>#include<algorithm>using namespace std;#define MAXN 100000int A[MAX
原创
2022-10-21 16:08:34
100阅读
一、算法概述1.1算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。!(https://s2.51cto.com/images/blog/202302/01171
原创
2023-02-01 17:16:58
146阅读
希尔排序法介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入 排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 简单插入排序存在的问题 我们看简单的插入排序可能存在的问题. 数组 arr = {2,3,4,5,6,1} ...
转载
2021-07-17 14:27:00
197阅读
2评论
希尔排序(Shell sort)的名称源于它的发明者 Donald Shell,该算法是冲破二次时间屏障(冒泡和插入排序,基于相邻元素的交换)的第一批算法。希尔排序改进了冒泡和插入排序的相邻元素才进行交换,而是比较相距一段距离的元素来工作,各趟比较所用的距离随着算法的进行而减少,直到只比较相邻元素的最后一趟排序为止。正是因为这样的工作机制,希尔排序有时也称为缩小增量排序(diminishing i
转载
2016-10-04 10:56:00
309阅读
2评论
在分析插入排序(插入排序算法实现)的算法性能的过程时知道。当数组规模较小或者存在较多的有序子序列时。插入排序将会在非常短的时间内完毕数组的排序,为此能够设计一个单调序列h[n],将数组分为多个小的序列,然后这些小的序列使用插入排序。h[n]={1,4,7,10,13,16,19……,3*x+1}。
转载
2016-03-25 15:33:00
262阅读
2评论
背景在三种简单的排序算法中(冒泡、选择和插入)插入排序的算法最好,不过插入过程可能需要进行大量的移动,如何尽可能少的移动元素呢?希尔排序正是基于对这个问题的思考而想出来的,
原创
2021-07-21 15:22:38
255阅读
希尔排序(Shell sort)的名称源于它的发明者 Donald Shell,该算法是冲破二次时间屏障(冒泡和插入排序,基于相邻元素的交换)的第一批算法。希尔排序改进了冒泡和插入排序的相邻元素才进行交换,而是比较相距一段距离的元素来工作,各趟比较所用的距离随着算法的进行而减少,直到只比较相邻元素的最后一趟排序为止。正是因为这样的工作机制,希尔排序有时也称为缩小增量排序(diminishing i
转载
2016-10-04 10:56:00
158阅读
2评论
个数少,但移动的距离很长,这是非常高效的;当h值减小时,每一... Read More
转载
2013-05-22 20:58:00
145阅读
2评论
直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数
原创
2023-05-29 11:35:56
117阅读
python实现【希尔排序】(Shell Sort)算法原理及介绍1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动
原创
2022-11-29 16:20:05
123阅读
前言 本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此;一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中都有详细讲解,而我写这些博客只是记录自己学习过程,加入了一些自己的理解,同时也希望给别人提供帮助。 前提故事 骚年在上次与博主进行了直接插
原创
2022-11-03 12:20:36
302阅读
希尔排序-----交换法import java.util.Arrays;public class ShellSort { public static void main(String[] args) { int num = 10; int[] arr = new int[num]; for (int i = 0; i ...
原创
2021-08-24 15:01:40
148阅读
希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进。希尔排序又叫缩小增;每趟
转载
2023-02-06 18:18:19
57阅读
经典排序算法 - 希尔排序Shell sort经典排序算法 - 希尔排序Shell sort希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分,第一部分,希尔排序介绍第二部分,如何选取关键字,选取关键字是希尔排序的关键第一块希尔排序介绍准备待排数组[6 2 4 1 5 9]首先需要选取关键字,例如关键是3和1(第一步分成三组,第二步分成一组),那么待排数组分成了以下三个虚拟组:[
转载
精选
2013-09-08 21:48:02
793阅读
希尔排序时插入排序的一种,也称缩小增量排序,是直接插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。
原创
2022-08-21 00:29:31
56阅读
希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分,第一
原创
2022-03-26 10:07:02
222阅读
这一系列博客的特点就是——给出每趟排序的结果本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好,所以这些博客就算是对自己的总结吧。#include <stdio.h>
void ShellSort(int *m, int n)
{
int i,flag,gap;
for(gap=n;gap!=1;
原创
2015-04-29 16:01:55
592阅读
(1)算法简介希尔排序的核心在于间隔序列的设定。1959年Shell发明; 第一个突破O(n^2)的排序算法;是简单插入排序的改进版;它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。 !划重点:在这里重点解释下为什么Shell Sort时间复杂度为O(n*logn),比插入排序高级:该方法的基本思想是:
原创
2022-03-04 11:08:16
211阅读