从递归视角理解快速排序(C语言实现)

本文通过递归的角度详细解释了快速排序的原理,以C语言实现该算法。首先介绍了递归的基本概念,然后阐述了快速排序的思想,即选取基准值,将数组分为两部分,使得基准值左边的数小于基准值,右边的数大于基准值,并通过递归继续处理左右两部分。最后展示了完整的快速排序代码和主函数调用示例。
摘要由CSDN通过智能技术生成
  1. 在说快速排序之前我们先要了解递归。

递归,按照通俗易懂的理解就是自我调用。写一个自我调用的函数如下:

int defined_pow(int n,int count)
{
   
	if(count == 0)
		return 1;
	else
		return n*defined_pow(n,count -1);
 } 

这个函数的作用是求n的count次方,当count为0时,我们返回1(任何数的0次方都等于1),当count不为0时,我们先计算n的count-1次方,再讲结果与n相乘,再返回给调用它的函数。
这个函数会一直调用它自己,每次将结果多乘一个n,计数器count减少1。当count等于1的时候,n总共被乘了 count次,n^count*1,刚好是n的count次方。


通常在递归的函数中,会设置一个if语句,if语句控制递归结束的条件(否则就陷入死循环),上一个例子中,我们设置的递归结束条件是count==0,即计数器等于零。而在下面出场的快速排序算法中,我们设置的条件则是所要排序的数组的左下标大于等于右下标。

  1. 先来讲一下快速排序的思想:
    快速排序(从小到大),指的是将数组中的第一个数base作为参考,将所有大于第一个数的元素放到第一个数的右边,同时将所有小于第一个数的元素放到第一个数的右边。这样,第一个数base就不再是数组中的第一个元素,而是被存放在了数组的中间。
    此时我们再分别在base的左边和base的右边调用这个快速排序函数本身,以base为分界线,分别将base左边和base右边的数组进行递归,下标low和high分别表示最左边的元素下标和最右边的元素下标,使得比它们大的数都被存放在它们各自的右边,比它们小的数都被存放在它们各自的右边。
    在左下标大于等于右下标之前,函数会一致递归调用它本身,最后的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值