def shell_sort(list):n=len(list)gap=n//2while gap > 0:print([i for i in range(gap,n)],’------------’)for i in range(gap,n):j=iwhile j>=gap and list[j-gap]>list[j]:list[j-gap],list[j]=...
Shell排序:一种插入排序。距离的概念:两个数之间的间隔i个数,这两个数的距离就为i例如:1
原理将排序数组分成若干个子序列(这个取决于最初设定的步长值),然后对各个子序列之间进行直接插入排序,最后再缩小增量(即步长值)再进行插入排序,直到序列顺序基本稳定(步长足够小)时,对这种序列进行一次直接插入排序,在排序状况较好时,直接插入排序的效率还是挺高的。分析 在最坏的情况下,每个数字在每次比较的过程总都会被比较一次,所以在最坏的情况下其时间复杂度O(n2)。
原创
2016-03-15 22:11:12
653阅读
原理将排序数组分成若干个子序列(这个取决于最初设定的步长值),然后对各个子序列之间进行直接插入排序,最后再缩小增量(即步长值)再进行插入排序,直到序列顺序基本稳定(步长足够小)时,对这种序列进行一次直接插入排序,在排序状况较好时,直接插入排序的效率还是挺高的。分析 在最坏的情况下,每个数字在每次比较的过程总都会被比较一次,所以在最坏的情况下其时间复杂度O(n2)。
原创
2016-03-15 22:10:23
584阅读
希尔排序(Shell sort)的名称源于它的发明者 Donald Shell,该算法是冲破二次时间屏障(冒泡和插入排序,基于相邻元素的交换)的第一批算法。希尔排序改进了冒泡和插入排序的相邻元素才进行交换,而是比较相距一段距离的元素来工作,各趟比较所用的距离随着算法的进行而减少,直到只比较相邻元素的最后一趟排序为止。正是因为这样的工作机制,希尔排序有时也称为缩小增量排序(diminishing i
转载
2016-10-04 10:56:00
238阅读
2评论
希尔排序名字来自于发明人D.L.Shell,是简单直接插入排序的增强版,采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后分组进行简单直接插入排序,随后逐步缩小增量,继续按组进行简单直接插入排序操作,直至增量为1。
转载
2021-07-01 10:46:41
89阅读
希尔排序(Shell sort)的名称源于它的发明者 Donald Shell,该算法是冲破二次时间屏障(冒泡和插入排序,基于相邻元素的交换)的第一批算法。希尔排序改进了冒泡和插入排序的相邻元素才进行交换,而是比较相距一段距离的元素来工作,各趟比较所用的距离随着算法的进行而减少,直到只比较相邻元素的最后一趟排序为止。正是因为这样的工作机制,希尔排序有时也称为缩小增量排序(diminishing i
转载
2016-10-04 10:56:00
107阅读
2评论
举例#!/bin/bashecho "ple...
转载
2018-07-07 11:44:00
113阅读
2评论
2.SHELL排序 这个排序非常复杂,看了程序就知道了。 首先需要一个递减的步长,这里我们使用的是9、5、3、1(最后的步长必须是1)。 工作原理是首先对相隔9-1个元素的所有内容排序,然后再使用同样的方法对相隔5-1个元素的排序 以次类推。 #include <iostream.h> void ShellSort(int* pData,int Count) {  
转载
精选
2008-04-16 15:46:58
1898阅读
举例#!/bin/bashecho "ple...
转载
2018-07-07 11:43:00
49阅读
2评论
#include<iostream>
using namespace std;
void ShellSort(int* a, int len);
int main()
{
int i;
int array[10];
for (i = 0; i < 10; i++)
{
cin >> array[i];
}
ShellSort(array, 10);
原创
2021-08-17 21:08:10
795阅读
前言 本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此;一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中都有详细讲解,而我写这些博客只是记录自己学习过程,加入了一些自己的理解,同时也希望给别人提供帮助。 前提故事 骚年在上次与博主进行了直接插
[基本的想法]将原本有大量记录数的记录进行分组。切割成若干个子序列,此时每一个子序列待排序的记录个数就比較少了,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时。再对全体记录进行一次直接插入排序。所谓的基本有序,就是小的keyword基本在前面,大的基本在后面,不大不小的基本在中间。像...
转载
2015-07-29 10:58:00
26阅读
2评论
数组排序 一 冒泡排序 类似于气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。 基本思想: 冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到 ...
转载
2021-07-21 13:02:00
90阅读
2评论
1、举例说明 定义增量序列DM &gt; DM-1 &gt; … &gt; D1 = 1 对每个Dk进行“Dk间隔”排序( k = M, M-1, … 1 )注意:“Dk间隔”有序的序列,在执行“Dk-1间隔”排序后,仍然是“Dk间隔”有序的2、原始希尔排序DM = [N/2] , Dk = [Dk+1/2]#include&lt;iostream&gt;using n
原创
2021-07-12 16:17:34
512阅读
shell对内容按长度排序:如删除目录时先删除深路径,再删除浅路径从少到多:/usr/bin/awk'{printlength,$0}'/log/aa.txt|sort-n|sed's/.*//'>/log/bb.txt从多到少:/usr/bin/awk'{printlength,$0}'/log/aa.txt|sort-nr|sed'
原创
2018-10-09 18:22:07
5536阅读
#include<cstdio>#include<algorithm>using namespace std;#define MAXN 100000int A[MAX
一、算法概述1.1算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。!(https://s2.51cto.com/images/blog/202302/01171
是插入排序经过改进之后的高效版本,也称缩小增量排序。1959 年提出,是突破时间复杂度 O(n2) 的第一批算法之一。缩小增量排序的最优增量选择是一个数学难题,一般采用希尔建议的增量,具体如下。 思路与步骤:首次选择的增量(即步长,下同) step = 数组长度 / 2 取整;缩小增量step ,每次减半,直到为 1 结束缩小;逐渐缩小的增量组成一个序列:[n/2, n/2/2, ... 1]对数
原创
2021-01-15 12:44:37
295阅读