数据结构 - 快速排序

2020-06-11  本文已影响0人  nlpming
一趟快速排序(partition)
时间复杂度
代码实现
#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;
}

参考资料

上一篇 下一篇

猜你喜欢

热点阅读