1.思路
在前面标准版快速排序的前提下,在每次选择key值的时候,从原来的选择数组最末尾元素变为从数组中随机抽取。随机快速排序基准的选择更能适应大规模随机数据的快速排序。
2.代码(主要部分)
int RandomPartition(int *nArr, int nLeft, int nRight) {
srand(time(NULL));
int nKey = rand() % (nRight - nLeft + 1) + nLeft; //随机选择【nLeft, nRight】内的某一个数
Swape(&nArr[nKey], &nArr[nRight]); //将选择的数与nArr[nRight]交换,即将选择的数作为Key值进行排序
return PartitionUp(nArr, nLeft, nRight);
}
void QuickSortRandom(int *nArr, int nLeft, int nRight) {
if(nLeft < nRight) {
int nTmpPos = RandomPartition(nArr, nLeft, nRight);
QuickSortRandom(nArr, nLeft, nTmpPos - 1);
QuickSortRandom(nArr, nTmpPos + 1, nRight);
}
}
其余代码与前一篇中的基本快排一模一样。
3.运行结果(与之前一样)
4.总结:
随机快速排序基准的选择更能适应大规模随机数据的快速排序。其他性能与之前一样。