快速排序思路及Java实现

主要思路: 找一个标准数,将比标准数小的数放在它的左边,比标准数大的数放在右边,再利用递归思想,对左右两部分重复上述步骤。最坏情况下时间复杂度为O(n^2),一般情况下时间复杂度为O(logn)
快速排序是不稳定的。体现在如果数组内有相等的元素,这些元素可能会改变位置。

 private static void quickSort(int[] arr,int start,int end){
        if (arr == null || arr.length<=1)
            return;
        if (end-start < 1)
            return;
        int left = start;
        int right = end;
        int temp = arr[start]; //以这个数为标准数
        while (left < right){
            //先移动右边的游标,如果比标准数大或者等于标准数,右边左移,左边的游标同理
            //当right指向的元素小于标准数 将left指向的元素赋值为right指向的元素
            while (temp<=arr[right] && left<right)
                right--;
            if (left<right)
                //先用右边的元素覆盖左边的元素,再left+1
                arr[left++] = arr[right];
            while (temp>=arr[left] && left<right)
                left++;
            if(left<right)
                arr[right--] = arr[left];
        }
        arr[left] = temp;
        quickSort(arr,start,left-1);
        quickSort(arr,left+1,end);
    }

    public static void main(String[] args) {
        int[]  arr = {2,0,1};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值