快速排序算法

先找个中轴上的值,把小于中轴值的放在左边,大于中轴值的放在右边,然后依次
向左递归或者向右递归
    /*
     *快速排序法
     * 时间复杂度 :
     */
    public void quickSort(int arr[],int left,int right){
         int l=left;//最左边下标
         int r=right;//最右边下标
         int povit=arr[(left+right)/2];//中轴的值
        int temp=0;//临时变量 作为交换时使用
        //如果最左边小于最右边,比povit大的放到最右边
            while ( l < r ){
                 //在povit的左边一定比povit小
                while (arr[l]<povit){
                      l+=1;
                  }
              //在pivot的右边一直找 在povit的右边一定比povit大
                 while (arr[r]>povit){
                     r-=1;
                   }
             //如果l>=r 说明pivot 的左右两的值,已按照左边全部是
              //小于等于pivot的值,右边全部是大于等于pivot值
                 if(l>=r){
                     break;
                 }
                 //交换
                 temp=arr[l];
                 arr[l]=arr[r];
                 arr[r]=temp;
                 //交换完后,发现这个arr[l]==pivot的值相等--,前移动
                 if(arr[l]==povit){
                     r-=1;
                 }
                //交换完后,发现这个arr[r]==pivot的值相等l++,后移动
                 if(arr[r]==povit){
                     l+=1;
                 }
               }
                //如果l==r 必须l++ r--,否则会出现栈溢出
                if(l==r){
                    l+=1;
                    r-=1;
                }
                //向左递归
                if(left<r){
                    quickSort(arr,left,r);
                }
                //向右递归
                if(right > l){
                    quickSort(arr,l,right);
                }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值