#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
#include <iterator>
using namespace std;
default_random_engine e;
uniform_int_distribution<unsigned> u(0, 100);
int partition(vector<int> &array, int left, int right)
{
int i = left - 1;
for (int j = left; j != right; ++j)
{
if (array[j] <= array[right])
{
swap(array[++i], array[j]);
}
}
swap(array[++i], array[right]);
return i;
}
int random_partition(vector<int> &array, int left, int right)
{
int random = left + u(e) % (right-left+1);
swap(array[random], array[right]);
return partition(array, left, right);
}
int random_quick(vector<int> &array, int left, int right)
{
if (left < right)
{
int mid = random_partition(array, left, right);
random_quick(array, left, mid - 1);
random_quick(array, mid+1, right);
}
return 0;
}
int main()
{
vector<int> demo = {9,8,7,6,5,4,3,2,1,0};
random_quick(demo, 0, demo.size()-1);
ostream_iterator<int> out_iter(cout, " ");
copy(demo.begin(), demo.end(), out_iter);
return 0;
}
快速排序2 随机化
最新推荐文章于 2024-07-28 22:35:47 发布