#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void shuffle(vector<int> &nums)
{
int n = nums.size();
for (int i = 0; i < n; i++)
{
swap(nums[i], nums[rand() % (n - i) + i]);
}
return;
}
int partition(vector<int> &nums, int lo, int hi)
{
swap(nums[lo], nums[rand() % (hi - lo + 1) + lo]);
int pivot = nums[lo];
while (lo < hi)
{
while (lo < hi && pivot <= nums[hi])
hi--;
nums[lo] = nums[hi];
while (lo < hi&&nums[lo] <= pivot)
lo++;
nums[hi] = nums[lo];
}
nums[lo] = pivot;
return lo;
}
int partition2(vector<int> &nums, int lo, int hi)
{
swap(nums[lo], nums[rand() % (hi - lo + 1) + lo]);
int pivot = nums[lo];
while (lo < hi)
{
while (lo < hi)
{
if (pivot < nums[hi])
hi--;
else
{
nums[lo++] = nums[hi];
break;
}
}
while (lo < hi)
{
if (nums[lo] < pivot)
lo++;
else
{
nums[hi--] = nums[lo];
break;
}
}
}
nums[lo] = pivot;
return lo;
}
void quickSort(vector<int> &nums, int lo, int hi)
{
if (hi - lo < 2) return;
int mid = partition2(nums, lo, hi - 1);
//int mid = partition(nums, lo, hi - 1);
quickSort(nums, lo, mid);
quickSort(nums, mid + 1, hi);
return;
}
int main()
{
vector<int> a;
for (int i = 0; i < 20; i++)
a.push_back(i);
for (int i = 5; i < 10; i++)
a[i] = 3;
shuffle(a);
cout << "shuffle a: " << endl;
for (auto &i : a) cout << i << " ";
cout << endl;
vector<int> b(a);
quickSort(b, 0, b.size());
cout << "quickSort b: " << endl;
for (auto &i : b) cout << i << " ";
cout << endl;
}
快排
最新推荐文章于 2024-08-28 19:43:12 发布