Java 实现快速排序

Qk
1,多次二分排序
2,定义一个目标位置 index
3,进行一次right操作找到右边小于index的值 ,记录指针位置right
4,替换掉 index所在指针位置 (后自减进行指针迁移)
5,进行一次left操作找到左边大于index的值,记录指针位置left
6,替换掉上一次right指针所在的值 (后自增进行指针迁移)
。。。
7,left和right相遇,一次排序结束,将index的值替换掉left所在的位置

8,进行left指针两次进行递归操作
 
public class QKSORT {

    public static void qkSort(int[] arrs){
        quicksort(arrs,0,arrs.length-1);
    }

    static int tage = 0;

   private static void quicksort(int[] v, int oleft, int oright){

       if (oleft>oright) return;

       int index, left, right;
       left = oleft;
       right = oright;
       index = v[oleft];
       while (left<right){ tage++;
           //右找到小的指针
           while (left < right && index <= v[right]) {
               right--;
           }
           //进行一次right操作
           if (left<right) v[left++] =v[right];

           //左找到大的
           while (left < right && index >= v[left]) {
               left++;
           }
            //进行一次left操作
           if (left<right) v[right--] = v[left];

       }

       v[left] = index;

       quicksort(v,oleft,left-1);
       quicksort(v,left+1,oright);
   }


    @Test
    public void test1(){
        int[] arrs = new int[]{12, 52, 23, 24, 95, 56, 117, 8, 659, 411, 22};

        qkSort(arrs);

        System.out.println("最后结果 " +tage);
        System.out.println(Arrays.toString(arrs));

    }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值