#include<iostream> #include<cstdlib> #include<ctime> using namespace std; const int maxn = 5000; int main() { void Randomized_QuickSort(int A[], int p, int r); void out(int A[], int n); int n, A[maxn], B[maxn]; cin >> n; for(int i = 0; i < n; ++i) { cin >> A[i]; B[i] = A[i]; } Randomized_QuickSort(A, 0, n-1); out(A, n); return 0; } void Randomized_QuickSort(int A[], int p, int r) { int Randomized_Partition(int A[], int p, int r); if(p < r) { int q = Randomized_Partition(A, p, r); Randomized_QuickSort(A, p, q-1); Randomized_QuickSort(A, q+1, r); } } int Randomized_Partition(int A[], int p, int r) { int Partition(int A[], int p, int r); void exchange(int &a, int &b); int i = rand()%time(NULL)%(p+1)+r-p;//产生p到r的随机数 //或者是srand(time(NULL)); rand()%(p+1)+r-p; //注:rand()%40产生的是0~39的随机数 exchange(A[r], A[i]); //交换两数,产生随机主元 return Partition(A, p, r); } int Partition(int A[], int p, int r) { void exchange(int &a, int &b); int x = A[r]; int i = p-1; for(int j = p; j < r; ++j) { if(A[j] <= x) { i = i + 1; exchange(A[i], A[j]); } } i = i + 1; exchange(A[i], A[r]); return i; } void exchange(int &a, int &b) { int t = a; a = b; b = t; } void out(int A[], int n) { for(int i = 0; i < n; ++i) cout << A[i] << " "; cout << endl; }
转载于:https://www.cnblogs.com/sanghai/archive/2012/12/11/2813455.html