快速排序

快速排序的思想:找一个基准数,对数组进行排序,使基准数的左边的数都小于等于它,而右边的数都大于等于它,再对左右两部分递归地进行这个过程。

若以第一个数作为基准数,分别从两端开始探测,先从右往左找一个比基数小的数,再从左往右找一个比基数大的数,然后交换,当左右指针相等时,循环结束,此时两个指针所指向的数一定是小于等于基数的(因为先移动右指针,右指针停下要么是找到了比基数小的数,要么就是碰到了左指针,若左指针没有移动过,则指向的是基数,如果移动过,那就是从右指针交换过来的比基数小的数),所以把基数和这个数交换,此时基数左边的数一定都小于等于它,右边的数一定都大于等于它,再分别对基数的左右两部分递归进行快速排序。

public void sort(int[] arr,int low, int high){

        if (low >= high){
            return;
        }

        int start = low;
        int end = high;
        int pivot = arr[start];
        while (start < end){

            while(start < end && arr[end] > pivot){
                end--;
            }

            while (start < end && arr[start] <= pivot){
                start++;
            }

            if (start == end){
                break;
            }else{
                int temp = arr[start];
                arr[start] = arr[end];
                arr[end] = temp;
            }
        }

        arr[low] = arr[start];
        arr[start] = pivot;
        System.out.println(Arrays.toString(arr));
        sort(arr,low,start -1);
        sort(arr,start + 1, high);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值