排序算法(七):随机快速排序

        随机快速排序(Randomized Quick Sort)是快速排序算法的一种变种,它的基本思想是通过随机选择基准数(pivot)来避免最坏情况的出现,从而提高算法的性能。

随机快速排序的步骤如下:

  1. 选择一个随机元素作为基准数。
  2. 将数组中小于等于基准数的元素放在基准数的左边,大于基准数的元素放在基准数的右边。
  3. 对基准数左右两边的子数组分别进行递归快速排序。
  4. 重复步骤 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值