#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
///* 基本思想:
///* 1.选定中心轴pivot,及两个指针left和right交替移动。
///* 2.指向值比pivot值小的放到pivot左边left位置,比pivot值大的放到pivot右边right位置。
///* 3.对左子序列和右子序列分别重复进行以上操作。
///* 注:(一般选第一个为pivot,先移动right指针;选最后一个为pivot,先移动left指针)
///* 是不稳定排序
void qSort(std::vector<int> &nums, int l, int r){
if(l == r) return;
int pivot = nums[l];
int left = l, right = r;
while(left < right){
while(left < right && nums[right] >= pivot){
right--;
}
if(nums[right] < pivot){
nums[left] = nums[right];
left++;
}
while(left < right && nums[left] <= pivot){
left++;
}
if(nums[left] > pivot){
nums[right] = nums[left];
right--;
}
}
nums[left] = pivot;
qSort(nums, l, left);
qSort(nums, left+1, r);
}
void quickSort(std::vector<int> &nums){
if(nums.empty()) return;
int n = nums.size();
qSort(nums, 0, n-1);
}
int main(){
std::vector<int> nums {49, 38, 65, 97, 76, 13, 27, 49, 0, 14, -6, 900};
quickSort(nums);
std::copy(nums.begin(), nums.end(), std::ostream_iterator<int>{std::cout, " "});
return 0;
}
快速排序 C++实现
于 2023-09-11 10:59:59 首次发布