以下是参照《算法导论》上的伪代码写出的可运行的快排
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//枢纽元,返回一个位置,此位置左边的数都小于它,右边的数都大于它
int part(vector<int> &nums, int loc1, int loc2) {
int x = nums[loc2];
int i = loc1 - 1;
for (int j = loc1; j < loc2; ++j) {
if (nums[j] <= x) {
++i;
swap(nums[i],nums[j]);
}
}
swap(nums[i+1], nums[loc2]);
return i+1;
}
//快排
void quick_sort(vector<int> &nums, int loc1, int loc2) {
if (loc1 < loc2) {
int mid = part(nums, loc1, loc2);
quick_sort(nums, loc1, mid-1);
quick_sort(nums, mid + 1, loc2);
}
}
int main()
{
vector<int> nums = {2,8,7,1,3,5,6,4};
quick_sort(nums, 0, nums.size()-1);
for(int a : nums) {
cout<<a<<' ';
}
cout<<endl;
}