假设我有一个数组:
[9, 7, 13, 24, 2, 16, 3, 10]
我想基于int 9对数组进行排序,其中所有小于9的值都在其左侧,所有值都大于右侧,是否可以使用选择排序的版本?
这里有点难过
答案 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]