快排

排序

http://www.nowcoder.com/questionTerminal/2baf799ea0594abd974d37139de27896

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort (int[] arr) {
        // write code here
        quickSort(arr, 0, arr.length - 1);
        return arr;
    }

    void quickSort(int[] arr, int left, int right) {
        if(left < right) {
            int lo = left, hi = right, base = arr[left];
            while(lo < hi) {
                // 从右到左寻找第一个小于base的下标,补坑
                while(lo < hi && arr[hi] >= base) {
                    hi--;
                }
                if(lo < hi) {
                    arr[lo++] = arr[hi];
                }
                // 从左到右寻找第一个大于base的下标,补坑
                while(lo < hi && arr[lo] <= base) {
                    lo++;                    
                }
                if(lo < hi) {
                    arr[hi--] = arr[lo];
                }
            }
            // 此时 base 左边和右边的元素分别都小于和等于base
            arr[lo] = base;
            quickSort(arr, left, lo - 1);
            quickSort(arr, hi + 1, right);

        }
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务