首页 > 其他分享 >(2.7)希尔排序

(2.7)希尔排序

时间:2023-03-08 20:32:45浏览次数:38  
标签:记录 插入排序 希尔 增量 序列 排序 2.7 复杂度


文章目录

  • ​​1.希尔排序(缩小增量法)​​
  • ​​2.排序过程​​
  • ​​3.最坏复杂度分析​​

1.希尔排序(缩小增量法)

  • 基本思想:
    分割成若干个较小的子文件,对各个子文件分别进行直接插入排序,当文件达到基本有序时,再对整个文件进行一次直接插入排序。
  • 对待排记录序列先作“宏观”调整,再作“微观”调整。
    “宏观”调整,指的是,“跳跃式”的插入排序。

2.排序过程

  • 首先将记录序列分成若干子序列,
  • 然后分别对每个子序列进行直接插入排序,
  • 最后待基本有序时,再进行一次直接插入排序
  • 例如:将 n 个记录分成 d 个子序列:
    d个数据分为1组
{ R[1], R[1+d], R[1+2d], …, R[1+kd] }
{ R[2], R[2+d], R[2+2d], …, R[2+kd] }

{ R[d], R[2d], R[3d], …, R[kd], R[(k+1)d] }

其中, d 称为增量,它的值在排序过程中从大到小逐渐缩小,直至最后一趟排序减为 1。
  • 例 初始: 49 38 65 97 76 13 27 48 55 4
  • 代码
//r是待排序的记录,d是增量序列,一共有T个
void shellsort(JD r[], int n, in d[], int T)
{
int i,j,k;
JD x;
k=0;

//循环每一趟进行分组,组内进行简单插入排序
while(k < T)
{
//i为未排序记录的位置
for (i=d[k]+1;i<=n;i++)
{
x=r[i];
j=i-d[k];
//j为本组i前面的记录位置
while ((j>0)&&(x.key<r[j].key))
{
//组内简单插入排序
r[j+d[k]]=r[j];
j=j-d[k];
}
r[j+d[k]]=x;
}
k++;
}
}

3.最坏复杂度分析

  • 定理: 使用希尔增量的最坏时间复杂度为 O( (2.7)希尔排序_插入排序 ).



标签:记录,插入排序,希尔,增量,序列,排序,2.7,复杂度
From: https://blog.51cto.com/u_12740336/6108861

相关文章

  • 【MySQL】排序和分页
    排序ORDERBY多列;#强调格式:WHERE需要声明在FROM后,ORDERBY之前。先排序Country 再排序CustomerName,默认是按ASC排序的。SELECT*FROMCustomersORDERBYCountr......
  • 排序算法总结
    1.冒泡排序原理:数组元素两两比较,交换位置,大元素往后放,经过一轮比较后,最大的元素就会出现在最大索引处(nums[].length-1-i)。Java代码:publicclassSort01{//......
  • 冒泡排序(简单C++实现)
    实现代码如下://bubble_sort.cpp#include<stdio.h>voidprintArray(intarr[],intlen);//冒泡排序:最多进行n-1次排序intmain(){intarr[]={23,39,65,2......
  • 51Nod1019 逆序数(归并排序详解)
    逆序对给定一个1-N的排列A1,A2,...AN,如果Ai和Aj满足i<j且Ai>Aj,我们就称(Ai,Aj)是一个逆序对。 求A1,A2...AN中所有逆序对的数目。input 第一行包含一个整数N......
  • mysql修改存储引擎,mysql修改表字符集,mysql修改列字符集,mysql修改排序规则,mysql修改行
    【1】修改存储引ALTERTABLE`qipa250_articles`ENGINE=INNODB;ALTERTABLE`qipa250_articles_text`ENGINE=INNODB;ALTERTABLE`qipa250_authors`ENGINE=INNODB;......
  • 【选择排序算法详解】Java/Go/Python/JS/C 不同语言实现
    【选择排序算法详解】Java/Go/Python/JS/C不同语言实现 说明选择排序(SelectionSort)是一种简单直观的排序算法。跟冒泡、插入排序一样,它将数列分为已排序和待排序两个......
  • php快速排序和冒泡排序
    <?phpfunctionmaopao($arr){if(!is_array($arr)){return$arr;}$count=count($arr);if($count<=1){return$arr;}for......
  • 排序算法
    https://github.com/hustcc/JS-Sorting-Algorithm排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进......
  • 拓扑排序的妙用
    拓扑排序的妙用 F-EndlessWalk题意:给定一个有向图,和一个条件:从某个点出发,能无限前进。问满足条件的点的个数。分析:环上的点和能进入环的道路上的点符合无限前进的......
  • java8 分组排序
    //先根据姓名分组再根据分数排序Map<String,List<Student>>map1=listAll.stream().collect(Collectors.groupingBy(Student::getName,HashMap::new,Colle......