int partition(int* array, int p, int r)
{
srand((unsigned)time(NULL));//注册随机种子
int temp = rand() % (r - p + 1);//得到随机数字
Swap(array[p+temp],array[r]);//获得处于轴上的元素
int x = array[r],
i= p - 1,
j;
//此种方法是异常的巧妙: 1 8 9 893489534 1 2
// i j r(x)//类似这种的方法实在是太高明了
for(j=p; j<=r-1; j++) {
if(array[j] <= x)
{
i++;
Swap(array[i],array[j]);
}
}
Swap(array[i+1],array[r]);
return i+1;
}