#include "stdafx.h"
#include<iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int RANDOM(int p, int r)
{
srand((unsigned)time(NULL));
return (rand() % (r - p + 1)) + p;
}
int partition(int a[], int p, int r) {
int x, i,t;
x = a[r];
i = p - 1;
t = 0;
for (int j = p ; j <= r - 1; j++)
{
if (a[j]> x)
{
i = i + 1;
int ti;
ti = a[i];
a[i] = a[j];
a[j] = ti;
}
if (a[j] == x)
{
t = t + 1;
int ti;
ti = a[i+t];
a[i+t] = a[j];
a[j] = ti;
}
}
int tii;
tii = a[i+t+1];
a[i+1+t] = a[r];
a[r] = tii;
if (i == r - 1)return (p + r) / 2;
else
return i+1;
}
bool equ(int a[], int p, int r)
{
for (int i = p; i <= r; i++)
if (a[i] != a[i + 1])return false;
return true;
}
int random_partion(int a[], int p, int r)
{
int i = RANDOM(p, r);
int tii;
tii = a[i];
a[i] = a[r];
a[r] = tii;
return partition(a, p, r);
}
void quick(int a[], int p, int r) {
if (p < r&&(!equ(a, p, r)))
{
int q = random_partion(a, p, r);
quick(a, p, q - 1);
quick(a, q+1, r);
}
}
int main()
{
int a[] = { 0, 1,1,1,1,1,1 };
quick(a, 1, 6);
for (int i = 1; i < 7; i++)
cout << a[i];
int b[] = { 0,3,3,2,5,3 };
int q = partition(b, 1, 5);
cout <<endl<< q;
cout << RANDOM(1, 5);
while (1);
return 0;
}