希尔排序(Shellsort)】的更多相关文章

首先,Shell是发明这个算法的人名,不是这个算法的思想或者特点. 希尔排序,也称为增量递减排序.基本思路,是把原来的序列,等效视为一个矩阵的形式.矩阵的列数,也称为宽度或者增量,记为w. 假设数组A[n]以及矩阵B[][],对于两者的对应关系,可以记为A[k]=B[k/w][k%w].也就是说,A中的元素会按照先行后列的顺序排列,即先左后右.先上后下的顺序放入矩阵B中. 对于增量或者说矩阵的宽度w,会有许多策略进行选择.假设w={1,2,4,8,16,32...}.从w的集合中选择小于数组元素…
直接插入排序 要理解shell排序,首先要把直接插入排序的基础打扎实. 学习资料:白话经典算法系列之二 直接插入排序的三种实现.直接插入排序 根据我的思路,直接插入排序设置3重循环. 循环1:对 i=[无序序列]∈[ 1 , length ) 进行遍历. 循环2:对 j=[有序序列]∈[ 0 , i ) 进行遍历. 比较:nums [ i ] < nums [ j ] (发现有序序列中有元素不符合降序原则.即无序序列中有元素比有序序列还要小) 循环3:将 index= i 的元素插入到 j 的位…
#include<stdio.h> #include <time.h> #include<stdlib.h> int main(){ ]; //设立随机数 srand(time()); ;i<;i++){ a[i]=rand()%(); //随机数范围0到29之间 } //数组a的大小 ; //打印数组信息 ;i<size;i++){ printf("%d ",a[i]); } void ShellSort(int a[],int siz…
希尔排序(ShellSort),缩小增量排序,使用希尔增量时最坏运行时间O(n^2),不同的增量会对运行时间产生显著影响. void shellsort(int *nums,int n) { int gap,i,j; int tmp; ;gap>;gap/=) //改变增量 { for(i=gap;i<n;i++) { tmp=nums[i]; ;j-=gap) if(tmp<nums[j-gap]) nums[j]=nums[j-gap]; else break; nums[j]=tm…
代码(部分为别人代码): 1.希尔排序(ShellSort) /* * 希尔排序:先取一个小于n的整数d1作为第一个增量, * 把文件的全部记录分成(n除以d1)个组.所有距离为d1的倍数的记录放在同一个组中. * 先在各组内进行直接插入排序:然后,取第二个增量d2<d1重复上述的分组和排序, * 直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止. */ public class ShellSort { public sta…
1. 希尔排序的原理: 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出而得名. 在上面这幅图中: 初始时,有一个大小为 10 的无序序列. 在第一趟排序中,我们不妨设 gap1 = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组. 接下来,按照直接插入排序的方法对每个组进行排序. 在第二趟排序中,我们把上次的 gap 缩小一半,即 gap2 =…
1.介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 2.基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止 3.示意图 4.代码 using System; namespace DataStructure { public class ShellSo…
希尔排序 no 实现 希尔排序其实就是插入排序.只不过希尔排序在比较的元素的间隔不是1. 我们知道插入排序 都是 一个一个和之前的元素比较.发现比之前元素小就交换位置.但是希尔排序可能是和前第n个元素比较,如果发现比前第n个元素小就和前第n个元素交换位置.具体看下图 第一趟比较.n是为5.也就是说每个数和前面第5个数比较.如果发现小于前面第5个数的话.交换位置. 所以我们看到 72 比 592 小. 所以交换位置. 283 比 348 小.继续交换 第二趟比较. n 是2.同理 最后一次比较.n…
今天状态总是很糟,这种题目卡了一天... 是不是休息时间太少了,头脑迟钝了... 名字叫希尔排序,我还以为跟它有关,还搜索了下资料. 只要找到trick就会发现是很水的题目.只要对比下就能找到哪些是移动过的龟壳,然后输出就行了. 代码: #include <cstdio> #include <cstring> const int maxn = 1000; char pre[maxn][100], tar[maxn][100]; int main() { int n; // freo…
学希尔排序的时候,觉得有序性保持的性质十分神奇,但哪里都找不到数学证明.最后在Donald E. Knuth的The Art of Computer Programming中找到了(显然我没有读过这套书),现摘录并整理之. Theorem K. If a k-ordered file is h-sorted, it remains k-ordered. Thus a file that is first 7-sorted, then 5-sorted, becomes both 7-ordere…