随机快速排序(Randomized Quick Sort)是快速排序算法的一种变种,它的基本思想是通过随机选择基准数(pivot)来避免最坏情况的出现,从而提高算法的性能。
随机快速排序的步骤如下:
- 选择一个随机元素作为基准数。
- 将数组中小于等于基准数的元素放在基准数的左边,大于基准数的元素放在基准数的右边。
- 对基准数左右两边的子数组分别进行递归快速排序。
- 重复步骤 1-3,直到整个数组排序完成。
动画演示
下面为各编程语言实现随机快速排序的方法
C语言
#include <stdio.h>
#include <stdlib.h>
/* 交换函数 */
int Swap(int* i, int* j){
int temp = *i;
*i = *j;
*j = temp;
return *i, *j;
}
/* 分区函数 */
int Partition(int a[], int l, int r){
int i = l,j = r+1;
int pivot = a[l];
int swap;
// 将小于基准数的元素放在左边,大于基准数的放在右边
while(1){
while(a[++i] < pivot && i < r);
while(a[--j] > pivot);
if(i >= j)
break;
Swap(&a[i], &a[j]);
}
a[l] = a[j];
a[j] = pivot;
return j;
}
/* 生成随机基准数 */
int GenerateRandomPivot(int a[], int l, int r){
int pivot = rand() % (r-l+1)+l;
int swap;
Swap(&a[pivot], &a[l]);
return Partition(a, l, r);
}
/* 随机快速排序函数 */
void RandomQuickSort(int a