快速排序及C++实现

1.挑选一个基准值

2.小于基准值的数放在大于基准值的数的左边

3.将基准值放入中间,即两种数分界的地方,根据挑选的基准值决定如何插入。

4.此时,基准值左边的区间小于等于基准值,基准值小于等于右边的区间,这三段有序,但内部无序,所以,将基准值左右两端继续进行快速排序,直到区间长度为1。是一个递归的过程。

 

void quick_sort(int arr[],int left,int right)
{
    if(left>=right){
        return ;
    }
    int i,j,temp;
    i=left;
    j=right;
    temp=arr[left];//排序用的基准值,可自选
    //比基准值大的放在右边,小的放在左边。
    //可自选方法进行实现,最后结果要求比基准值小的在左边,比基准值大的在右边。
    while(i!=j){
        while(arr[j]>=temp && i<j){
            j--;
        }
        while(arr[i]<=temp && i<j){
            i++;
        }
        if(i<j){
            //出现左边大于基准且右边小于基准的情况,两者交换后则满足左边小右边大
            swap(arr[i],arr[j]);
        }
    }
    //i左边的值都小于等于基准值,右边都大于基准值
    //进行过交换的地方一定满足,所以循环终止情况只有i和j两者相遇
    //且在这种方法中,终止的位置一定是满足小于等于,不一定满足大于,因为是先从右往左进行查找
    swap(arr[left],a[i]);
    //基准值左边小于等于基准值,右边大于等于基准值,继续将左右区间进行快排。
    quick_sort(arr,left,i-1);
    quick_sort(arr,i+1,right);
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值