快速排序的划分方法(5种)

快速排序的划分方法(5种)

自己做的笔记,来自看过的博客和刷题的时候的发现。

划分的方法

对于元素进行比较,只有三种结果 >/=/<

所以我们可以假设<pivot的元素是蓝色,==是白色,>是红色

 

数组划分完之后应该是 蓝/蓝白+pivot+红/红白

1、单指针从左向右扫描跳过 蓝白
    最终划分结果: 蓝白混合+pivot+红

    int partition(vector<int>& arr, int l, int r) {
            int pivot = arr[l];  //最左元素 选为pivot
            int pivot_pos = l;//先记录位置
            while (l <= r) // 当左右指针交错时退出循环
            {  
                    if (arr[l] <= pivot) 
                            ++l;//遇到>pivot的元素(红色),就停下
                    else 
                    {
                            swap(arr[l], arr[r]);  // 否则左右指针内容交换
                            --r;  // 右指针--
                    }
            }
            swap(arr[pivot_pos], arr[r]);  // 退出循环时最后把pivot与r交换,此时l与r交错,l指向右部分第一元素,r指向左部分最后元素
            return r;//返回当前pivot位置
    }
    void quickSort(vector<int>& arr, int begin, int end) {
            if (end > begin) //递归终止条件,即只有一个元素,或 end<begin(<0,无元素)时退出
            {
                    int pos = p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值