#include <iostream>
#include <vector>
#include <random>
#include <math.h>
#include <algorithm>
using namespace std;
int partition(int A[], int begin, int end) {
int pivot_value {A[end]};
int i {begin - 1};
int j {begin};
for(;j <= end - 1; ++j) {
if(A[j] <= pivot_value) {
i++;
swap(A[i], A[j]);
}
}
swap(A[i + 1], A[end]);
return i + 1;
}
int randomized_partition(int A[], int begin, int end) {
random_device rd {};
default_random_engine e{rd()};
uniform_int_distribution<> u{begin, end};
int i = round(u(e));
swap(A[i], A[end]);
return partition(A, begin, end);
}
void randomized_quick_sort(int A[], int begin, int end) {
if(begin < end) {
int pivot = randomized_partition(A, begin, end);
randomized_quick_sort(A, begin, pivot - 1);
randomized_quick_sort(A, pivot + 1, end);
}
}
int main(int argc, const char * argv[]) {
int element {};
vector<int> v {};
cout << "please inpute the elements you want to randomize quick sort :" << endl;
while(cin >> element) {
v.push_back(element);
}
int* A = new int[v.size()];
int index = 0;
for_each(v.begin(), v.end(), [=](int x)mutable{ A[index++] = x; });
randomized_quick_sort(A, 0, static_cast<int>(v.size()) - 1);
cout << "the result is " << endl;
for(int i = 0; i < v.size(); ++i )
cout << A[i] << " ";
cout << endl;
delete []A;
return 0;
}
算法导论-第七章-快速排序:随机化快速排序C++实现
最新推荐文章于 2019-07-16 02:41:44 发布