【数据结构】排序算法之希尔排序(ShellSort)

希尔排序拆分讲解


    在没有学习希尔排序之前,想必老铁们应该只接触过冒泡排序。冒泡排序想必各位老铁已经能完全吃透了,可以手撕冒泡了。但是,手撕冒泡似乎不是什么难事,很多小白也掌握了冒泡排序,所一手撕冒泡似乎没有太大的意义。冒泡排序呢实际上没有什么意义,唯一的意义就是教学意义,因为它比其他排序都容易理解,算是入门水准,它的效率上桌吃饭只能和狗坐一桌。实践当中狗都不用,当然这里没有骂人的意思啊哈哈,接下来我们就开始讲解希尔排序。

正文开始:

一、插入排序


    在讲希尔排序之前,我们要先讲讲插入排序。为什么要先讲插入排序呢?这里我先卖个关子。

我们先来看看插入排序的动图:
在这里插入图片描述
    看了这个动图的老铁应该已经知道什么叫插入排序了吧?还没看懂的老铁听我细细道来。插入排序就是假设前n个数是有序的,然后将第n+1个数依次与前面n个数比较,假设在其中比n要小但比n-1大,那么就将n往后挪动一位,将要插入的数字插入空位即可。

代码展示:

//实现插入排序
void InsertSort(int* a, int n)
{
   
	//[0,end]有序   [end+1]的值插入
	//单趟排序
	for (int i = 0; i < n-1 ; i++)
	{
   
		int end=i;
		int temp = a[end + 1];//先将end+1的数据保存起来,将比它大的值往后挪之后就可以将其插入空位了
		//单趟排序
		while (end >= 0)
		{
   
			if (a[end] > temp)
			{
   
				//使用Swap(&a[end], &a[end + 1]);就是交换而不是插入了
				a[end + 1] = a[end];
				end--;
			}
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值