快速排序(随机化版本)

本文介绍了快速排序算法,特别是其随机化版本。通过选择一个随机值进行划分,该算法在平均情况下能实现O(nlgn)的时间复杂度,提高了在最坏情况下的表现。随机化版本有助于避免有序输入导致的性能退化,确保了更稳定的排序效率。
摘要由CSDN通过智能技术生成

算法描述:每次选择一个值,将比它小的值放在它的左边,比它大的值放在它的右边。不断递归调用即可。

时间复杂度:平均复杂度O(nlgn),最大复杂度为O(n2),最小复杂度为O(n)。有序程度越高,复杂度越大。最高时是每次换位都是全部分到同一边。但快速排序的稳定性比较强, 大部分都是接近于平均情况。如果每次取得值选择的是随机值,那么就稳定在平均复杂度了。

代码如下(随机化版本)

#include <bits/stdc++.h>
using namespace std;
int a[10000];

int random(int start,int end)
{
    int t;
    srand(time(NULL));
    while(true)
    {
        t=rand()%(end+1);
        if(t>=start)
        {
            return t;
        }
    }
}

void QuickSort(int a[], int low, int high)
{
    if(low > high)
    {
        return ;
    }
    int h = random(low, high);
    swap(a[h], a[low]);
    int first = low;
    int last = high;
    int key = a[low];
    while(first < last)
    {
        while(first < last && a[last] >= key)
        {
            --last;
        }
        a[first] = a[last];
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值