我是靠谱客的博主 忧郁蜡烛,最近开发中收集的这篇文章主要介绍Partition算法详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

partition算法有着非常重要的应用,这个算法的思想虽然简单,但具体实现的细节却比较多,今天我重点复习了这个算法,本文记录我对这个算法的理解。

文章目录

      • Partition算法解析
        • 二分Partition
        • 三分Partition
      • 二分Partition应用
        • 时间复杂度
        • 代码
      • 三分Partition应用
        • 代码

Partition算法解析

二分Partition

快速排序作为非常著名的排序算法,其思想却很简单:每次从数组中选一个数作为pivot,然后将数组划分为2部分,小于等于pivot数的在其左边,大于等于pivot的数在其右边,然后分别对pivot的左边和右边进行递归。
二分partition的实现用到了双指针,left寻找一个比pivot大的数,right寻找一个比pivot小的数,然后交换它们,循环这一过程直到left == right,将pivot放到这个位置。
注意: 如果pivot选的是最左的元素,则要先移动right;如果pivot选的是最右的元素,则要先移动left。

int partition(vector<int>& nums, int left, int right) {
   
    int pivot = nums[left], base = left;
    while (left < right) {
   
        while (left < right && nums[right] >= pivot) right--;
        while (left < right && nums[left] <= pivot) left++;
        swap(nums[left], nums[right]);
    }
    nums[base] = nums[left];
    nums[left] = pivot;
    return left;
}
<

最后

以上就是忧郁蜡烛为你收集整理的Partition算法详解的全部内容,希望文章能够帮你解决Partition算法详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部