我们有两个数组作为输入
Array1:[7,12,11,4]
Array2:[1,3,2,0] - >这是索引数组(即Array1的位置,如果它被排序)。
现在我们需要使用索引数组Array2对Array1进行排序。
时间复杂度应为O(N)
空间复杂度可能大于O(1)但应小于O(N)
你不应该使用额外的数组,因为这会成为O(N)空间复杂度
答案 0 :(得分:0)
考虑给出的数组是arr1和arr2。 按照array2排序的array1存储在'sortedArray'
中下面给出的Java代码:
int[] sortedArray = new int[arr1.length];
for(int i=0;i<arr1.length;i++){
int sourceIndex = arr2[i];
sortedArray[i] = arr1[sourceIndex];
}
时间复杂度和空间复杂度:O(n)
答案 1 :(得分:0)
似乎你想要的是下面的第二部分,你试图根据另一个数组对一个数组进行排序。否则,我不确定你为什么不直接对Array1进行排序。
一种方法是基于Array2对“索引”数组进行排序,然后使用它来索引到Array1。 Java示例:
Integer[] idx = new Integer[arr2.length];
for( int i = 0 ; i < idx.length; i++ ) idx[i] = i;
Arrays.sort(idx, new Comparator<Integer>() {
public int compare(Integer i1, Integer i2) {
return arr2[i1].compareTo(arr2[i2]);
}
});
// arr2[idx[i]] is the sorted value of arr2 at index i
// arr1[idx[i]] is the sorted value of arr1 corresponding to above at index i
(注意,您必须使用Integer而不是int,否则您不能使用自定义比较器。)
答案 2 :(得分:0)
基于在第二阵列中提供的具有IN PLACE的索引来排序或排列给定阵列,即O(1)空间和O(k * n)时间,其中k <1。 n,n =数组的长度
void swapElement(int arr1[], int arr2[], int i, int arrj){
int temp = arr1[i];
arr1[i] = arr1[arrj];
arr1[arrj] = temp;
temp = arr2[i];
arr2[i] = arr2[arrj];
arr2[arrj] = temp;
}
void sortArray(int arr1[], int arr2[], int n){
int i=0;
for(;i<n;i++)
{
while(arr2[i]!=i){
swapElement(arr1, arr2, i, arr2[i]);
}
}
}