Java - 如何基于单个int对数组进行排序

时间:2015-09-08 01:53:25

标签: java sorting

假设我有一个数组:

[9, 7, 13, 24, 2, 16, 3, 10]

我想基于int 9对数组进行排序,其中所有小于9的值都在其左侧,所有值都大于右侧,是否可以使用选择排序的版本?

这里有点难过

1 个答案:

答案 0 :(得分:1)

你想要的应该是快速排序的一步。

我稍微修改一下,以便您可以传递一个所需的轴作为参数:

public static void main(String[] args) {
    int[] a = new int[]{9,7,13,24,2,16,3,10};
    System.out.println(partition(a,9));//use value 9 as pivot 
    System.out.println(Arrays.toString(a));

}

private static int  partition(int[] a, int pivot){
    int pivotIndex = 0;

    for(int i=0;i<a.length;i++){//find initial pivot Index
        if(a[i]==pivot) {
            pivotIndex = i;
            break;
        }
    }


    int low = 0;
    int high = a.length-1;

    while(low<high){
        while(low<high&&a[high]>=pivot) high--;
        a[pivotIndex] = a[high];
        pivotIndex = high;

        while(low<high&&a[low]<=pivot) low++;
        a[pivotIndex] = a[low];
        pivotIndex= low;
    }

    //Actual pivotIndex finded
    a[pivotIndex] = pivot;

    return pivotIndex;
}

输出:

3
[3, 7, 2, 9, 24, 16, 13, 10]