【C语言】图解易懂快速排序--挖坑版

目录

一、前言

二、挖坑法的思想

 1、先挖坑

 2、再填坑

三、代码实现

四、结语


一、前言

对于快速排序的介绍,请大家点击下面链接,那里有对初始版本的详细介绍。

https://blog.csdn.net/2301_79825793/article/details/136911944?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/2301_79825793/article/details/136911944?spm=1001.2014.3001.5502

今天主要讲解一个更加容易理解的方法--挖坑法。

二、挖坑法的思想

 1、先挖坑

 

 2、再填坑

       快排的本质还是让hole排序一次后就到了他的最终位置。

       所以这里我们的 left 负责找小值,right 负责找大值。

具体的步骤:

1)把第一个数保存在临时变量hole中

循环:2)  left找比hole小的数放入坑中,自己的位置形成新的坑

        3)right找大值放入新的坑中,自己的位置形成新的坑

4)left和right相遇时,把hole的值放入

       看不懂文字没关系,咱们上图解:(找值和放坑为一个动作)

三、代码实现

 和上一篇里讲述的一致,一次挖坑后就把数组分成了三个部分:

【左子列】  hole  【右子列】 

接下来,我们只用分别对左右子列分别处理,直到左右子列区间不存在即可(递归的思想)

//一次挖坑
int PartSort(int* a, int left, int right)
{
	int _hole = a[left];
	int hole = left;
	while (left < right)
	{
		while (left < right)
		{
			if (a[right] < _hole)
			{
				a[hole] = a[right];
				hole = right;
				break;
			}
			right--;
		}

		while (left < right)
		{
			if (a[left] > _hole)
			{
				a[hole] = a[left];
				hole = left;
				break;
			}
			left++;
		}
	}
	a[left] = _hole;
	return hole;
}


//整个数组都挖一遍 递归
void HoleSort(int* a, int begin, int end)
{
	//  left hole right

	if (begin >= end)
		return;

	int hole = PartSort(a, begin, end);


	HoleSort(a, begin, hole - 1);


	HoleSort(a, hole + 1, end);
}

四、结语

谢谢大家看到最后,相对于第一个方法,这个方法更容易理解,上手起来更加容易。

但是其中的本质是一样的,作者主页也有其他两种方法的介绍,欢迎大家关注。

如果文章有误,欢迎大家指出!

最后,作者主页有许多有趣的知识,欢迎大家关注作者,作者会持续更新有趣的代码,在有趣的玩意儿中成长!

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值