快速排序法

     这两天把排序相关的算法看了一遍,主要有:冒泡排序和快速排序。冒泡排序简单易懂易上手这里不多赘述,而快速排序则要要求相对高一些,用到了函数递归这一方面的知识。以下为我对快速排序的理解。

     快速排序最主要的内核是递归。方法是首先我们需要选择一个基准值,比基准值大的放在右边,小的放左边中间放基准值。这样一次下来我们便得到了一个新的序列,新序列让基准值分成了两部分左边小于基准值右边大于基准值。然后我们再把左子序列和右子序列分别再来一次上边的行动……如此循环下来最终我们便完成了排序。

       方法实践

     函数一的实践方法

       一:选择基准值 

       为了方便一般是数组第一个元素的大小。

      二:比较与基准值的大小

       这里务必注意!!!一定是右边开始比较!因为当right=left 时,基准值要和arr[right]交换。为了保证arr[right]这个值比基准值小因此我们第一步要从右边开始比较,其次再比较左边。因为先从右边开始比较因此到最后一定是right先遇到比基准值小的数,然后等待left来到这里最后完成交换。

     三:返回最终left=right时right或left的值(也就是下标)留待后用

以上就是一趟排序的方法,完成后左子序列和右子序列再次排序的方法同理,但这里就用到了调用函数的知识我们把上述排序一次的代码作为一个函数,下面我们再写一个函数专门用来循环调用这个函数来循环排序,最终达成我们的目的。

        函数二的方法

      函数二的主要目标是传递给函数一相关参数让其完成第一次排序并接收第一次排序完成后left或right的值 ,同时下边要完成对左子序列与右子序列的排序(可能要排很多次)因此我们在这里面一定要让函数一有一个返回值这样我们才可以重新规划基准值与开始值。

这样我们接收函数一的返回值再返回给函数一相关参数让其排序再返回相应的值……直到不满足循环条件。那么结束条件是什么呢?很明显当左子序列或右子序列里的元素个数等于1也就是left>=right时循环结束也就完成了排序。

以上就是个人对快速排序法的理解。下面代码仅供参考

    cf586dda9a834007b4425fed57317cfa.jpg

1e5a210e4c194276918985637ad244f0.jpg 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值