美文网首页
数据结构 - 快速排序

数据结构 - 快速排序

作者: nlpming | 来源:发表于2020-06-11 08:42 被阅读0次
一趟快速排序(partition)
    1. 设置 pivot = nums[left]
      image.png
    1. right指针从右向左移动,如果left < right && nums[right] >= pivot, 则 right--,循环执行,直到不满足条件。将 nums[right] 赋值给 nums[left] :nums[left] = nums[right]
      image.png
    1. left指针从左向右移动,如果left < right && nums[left] <= pivot,则 left++,循环执行,直到不满足条件。将 nums[left] 赋值给 nums[right]:nums[right] = nums[left]
      image.png
    1. 如果 left < right,循环执行步骤2,3
    1. 将 pivot 赋值给 nums[left]:nums[left] = pivot,返回left (pivot_idx);
时间复杂度
  • O(nlogn)
代码实现
  • printVector需自己实现;
#include <iostream>
#include <vector>
#include "print.h"

using namespace std;

template <typename T>
int partition(vector<T>& nums, int left, int right){
    // 一趟快速排序
    T pivot = nums[left];
  
    // nums[left], nums[right] 和 pivot 进行大小对比
    while(left < right){
        while(left < right && nums[right] >= pivot)
            right --;
        nums[left] = nums[right];

        while(left < right && nums[left] <= pivot)
            left ++;
        nums[right] = nums[left];
    }

    // pivot赋值
    nums[left] = pivot;
    return left;
}
/**
 * 快速排序
 * @tparam T
 * @param nums
 * @param left
 * @param right
 */
template <typename T>
void quickSort(vector<T>& nums, int left, int right){
    // 此处是 if 判断
    if(left < right){
        int pivot_idx = partition(nums, left, right);
        quickSort(nums, left, pivot_idx-1);
        quickSort(nums, pivot_idx+1, right);
    }
}

// 打印数组
template <typename T>
void printVector(vector<T> nums){
    for(int i=0; i<nums.size(); i++){
        cout<<nums[i]<<" ";
    }
    cout<<endl;
}

int main(){

    vector<int> nums={1,4,5,3,2};

    printVector(nums);
    quickSort(nums, 0, 4);
    printVector(nums);

    return 0;
}

参考资料

相关文章

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 排序算法6:快速排序

    数据结构与算法 快速排序为应用最多的排序算法,因为快速二字而闻名。快速排序和归并排序一样,采用的都是分治思想。 分...

  • Python 算法大全

    这个库涵盖了多种算法和数据结构的介绍,比如: 排序算法(冒泡排序、希尔排序、插入排序、桶排序、合并排序、快速排序、...

  • C语言:关于数据的几种排序算法

    数据结构的排序算法有很多种。其中,快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法;基数排序、冒泡排序、...

  • 数据结构与算法——快速排序

    数据结构与算法——快速排序 快速排序,顾名思义,它速度很快,针对一般应用中各种不同的输入都要比其他排序算法快很多,...

  • 排序算法-快速排序

    数据结构 排序算法 快速排序 快速排序的做法是通过找到一个枢纽(pivot),这个枢纽可以将数组划分为两部分,一部...

  • 玩转算法面试:(三)LeetCode数组类问题

    数组中的问题其实最常见。 排序:选择排序;插入排序;归并排序;快速排序查找:二分查找法数据结构:栈;队列;堆…… ...

  • 算法(3)- 数组

    数组中的问题其实最常见如:排序(选择排序、插入排序、归并排序、快速排序)、查找(二分查找法)、数据结构(栈、队列、...

  • 算法与数据结构路线图

    学习算法与数据结构,深刻理解计算机科学 排序算法:插入、冒泡、选择、希尔、快速、归并、堆排序、计数排序、桶排序、基...

  • 排序算法

    常考排序 快速排序 归并排序 归并排序求逆序数对 堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法。 堆积...

网友评论

      本文标题:数据结构 - 快速排序

      本文链接:https://www.haomeiwen.com/subject/zrsvtktx.html