在实际中,我们常常要实现一些比较奇怪的排序。
例如,在一组数[1,3,5,8,4,6,5],保持原有顺序不变的情况下,按照大小排一次序。并且建立映射关系。(排序后用O(1)复杂度来查询第i大的数在原数组的位置)
例如这样
index 0 1 2 3 4 5 6
arr 1 3 5 8 4 6 5
sort 6 5 2 0 4 1 3
对于算法党来说,这时候可以手撕一个快排或者归并之类的。(但是如果是在比赛中,就没这个时间了。)
这时候哇,我们就得充分利用jdk.
指的就是Arrays.sort(T[] a, Comparator<? super T> c))这个方法!
下面是示例...
package sorts;
import java.util.Arrays;
import java.util.Comparator;
public class ArraySortTest {
static class Array_test{
int be_sort;
public Array_test(int be_sort) {
this.be_sort = be_sort;
}
}
public static void main(String[] args) {
int[] arr_test = {10,2,6,9,60,47,8,5,6,1};
Array_test[] arr = new Array_test[arr_test.length];
for(int i = 0 ; i<arr.length ; i++){
arr[i] = new Array_test(arr_test[i]);
}
Arrays.sort(arr, new Comparator<Array_test>() {
public int compare(Array_test o1, Array_test o2) {
return o1.be_sort - o2.be_sort;
}
});
System.out.print("[");
for(int i = 0 ; i<arr.length-1 ;i++){
System.out.print(arr[i].be_sort+" ,");
}
System.out.print(arr[arr.length-1].be_sort);
System.out.println("]");
}
}