排序之快排qsort

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

/*
rand产生的随机数从0~rand_max(32767) 
产生从x~y的随机数k=rand()%(y-x+1)+x 
*/

//k=rand()%(right-left+1)+left; 
void swap(int& a,int& b)  
{  
    if(a!=b)  
    {  
        a^=b;  
        b^=a;  
        a^=b;  
    }  
}
void  RANDOMIZED_QUICKSORT(int a[],int left,int right)
{
    srand((int) time(0));//以时间为随机种子 
    swap(a[rand()%(right-left+1)+left],a[right]);//随机化 
    int pivot = a[right],l = left,r = right;
    while(l<r)
    {
        swap(a[l],a[r]);//把分界值放在最左边 
        while(r>l&&a[r]>pivot)//交换后a[r]>pivot r会自减到a[r]<=pivot 保证最后的l=r 而且a[r]<pivot且pivot =a[left] 
            r--;
        while(l<r&&a[l]<=pivot)
            l++;
    }
    swap(a[left],a[r]);
    if(left<l-1)RANDOMIZED_QUICKSORT(a,left,l-1);
    if(r+1<right)RANDOMIZED_QUICKSORT(a,r+1,right);
}
int main()
{
    int a[10] = {2,9,71,20,0,212,364,78,-1,55};
    RANDOMIZED_QUICKSORT(a,0,9);
    for(int i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值