算法基础——双指针:快速排序(重点)

Posted 似梦半醒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法基础——双指针:快速排序(重点)相关的知识,希望对你有一定的参考价值。

快速排序(重点)

一、算法思想

  快排可以说是数据结构这门课里很重要的一个内容了,关键就在于快排的思想适用于很多算法场景,快排的思想就是交换,通过不断交换两个元素的位置使得最后能在序列中确定出一个元素在排序算法的最终位置。

  例如给出序列{5,3,6,2,1,4},快排的思想就是把第一个元素A[1]当做一个界,在A中找到一个位置,使得A[i]=5,而且该元素左边元素值都比5小,右边元素值都比5大,这时候可以再对左右两个子序列进行第二次排序。

  所以快排的思想主要是,通过交换分割数组,使得这个数组“部分有序”这么说有点抽象,其实就是找出一个分割点,把数组分割后左边的都比右边的小。对于上面的例子,在第一次分割后可能是{2,4,1,3,5,6}这个就是一个分割的数组,虽然这和你想到的结果可能不同,但是这就是一种可能的结果,这取决于你的算法怎么实现。

 

二、双指针应用

  下面给出一种快排算法很常用的实现方式——双指针

    1、定义两个指针分别指向数组的下界(left)和上界(right),定义一个temp用于存放A[1]的值。注:以下用*left和*right表示元素值

    2、只要*right大于temp就让right--(左移),当*right小于等于temp时,就把*right赋值到left处

    3、开始循环left,只要*left小于temp就让left++(右移),当*left大于temp时,就把*left赋值到right

    4、当left<right时执行2、3步骤,跳出循环时就把temp放到right处

  下面给出快排代码

  

 

   对于快速排序,大佬左呈云给出过更好的快速排序算法,不过对于考试来说这个算法足够了。

以上是关于算法基础——双指针:快速排序(重点)的主要内容,如果未能解决你的问题,请参考以下文章

算法快速排序

算法基础班 1.快速排序

js排序算法基础--快速排序

AcWing算法基础课排序 二分 高精度 前缀和 差分 双指针 位运算 离散化 区间合并

AcWing算法基础课基础算法

ACM道路之一:基础算法(快速排序)