题解 | #排序#

排序

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

双边快排 选取起始位置为中轴,从右边开始找到第一个比中中轴小的,从左边找到第一个比中轴大于等于的(不然走不动,交换位置,直接交换走了中轴)循环。左边维护的始终小于等于轴的边界,当两边相遇则说明找到中轴的位置,与中轴交换

代码: import java.util.*;

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

}

  private static void quick(int[] a, int l, int h) {
    if(l >= h){
        return;
    }
      int p = partition(a,l,h);
      quick(a,l,p-1);
      quick(a,p+1,h);
}

private static int partition(int[] a, int l, int h) {
    int pv = a[l];
    int i = l;
    int j = h;
    while (i < j) {
        // j 从右找小的
        while (a[j] > pv) {
            j--;
        }
        // i 从左找大的
        while (i < j && a[i] <= pv) {
            i++;
        }
        int  temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
        int  temp = a[l];
        a[l] = a[j];
        a[j] = temp;
    return j;
}

}

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务