排序——希尔排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、希尔排序
  • 二、希尔排序动态图
  • 三、希尔排序程序代码
  • 四、希尔排序习题
  • 总结


前言

  1. 希尔排序定义
  2. 希尔排序算法分析
  3. 希尔排序程序代码
  4. 希尔排序练习题

一、希尔排序

1.定义:先将待排序表分为若干个相同长度的子表(最后一个可不计),分别进行直接插入排序,当基本有序时,再对整体做一次直接插入排序,步骤:
(1)取一个步长d1 ,分为d1组,所有距离为d1倍数的放在一组
(2)各组中进行插入排序
(3)然后取步长d2,重复上述,直到取到步长为1,即所有记录已放在同一组中,再进行直接插入排序
(4)一般的,取d1=n/2 ,di+1=di/2向下取整,并且最后一个为1

二、希尔排序动态图

三、希尔排序程序代码

void ShellInsert(elementtype r[n+1],int k){
	dh=k;
	while(dh>=1){
		for(i=dh+1li<=n;i++){
			r[0]=r[I];
			j=i-dh;
			while(j>0&&r[j]>r[0]){
				r[j+dh]=r[j];
				j=j-dh;
			}
			r[j+dh]=r[0];
		}
		dh=dh/2;
	}
}

2.效率:空间为O(1),时间效率最坏情况下 O(n2)
3.稳定性:相同关键字会被划分为不同子表中,所以为不稳定算法
4.适用性:仅适用于顺序表

四、希尔排序习题

例题:
9、1、2、5、7、4、8、6、3、5
第一趟排序:4、1、2、3、5、9、8、6、5、7
第二趟排序:2、1、4、3、5、6、5、7、8、9
第三趟排序:1、2、3、4、5、5、6、7、8、9


总结

  1. 希尔排序定义
  2. 希尔排序算法分析
  3. 希尔排序程序代码
  4. 希尔排序练习题

你可能感兴趣的:(数据结构,排序算法,算法)