Reorder an array according to given indexes - GeeksforGeeks
Given two integer arrays of same size, "arr[]" and "index[]", reorder elements in "arr[]" according to given index array. It is not allowed to given array arr's length.
Read full article from Reorder an array according to given indexes - GeeksforGeeks
Given two integer arrays of same size, "arr[]" and "index[]", reorder elements in "arr[]" according to given index array. It is not allowed to given array arr's length.
Input: arr[] = [10, 11, 12];
index[] = [1, 0, 2];
Output: arr[] = [11, 10, 12]
index[] = [0, 1, 2]
void reorder(int arr[], int index[], int n){ // Fix all elements one by one for (int i=0; i<n; i++) { // While index[i] and arr[i] are not fixed while (index[i] != i) { // Store values of the target (or correct) // position before placing arr[i] there int oldTargetI = index[index[i]]; char oldTargetE = arr[index[i]]; // Place arr[i] at its target (or correct) // position. Also copy corrected index for // new position arr[index[i]] = arr[i]; index[index[i]] = index[i]; // Copy old target values to arr[i] and // index[i] index[i] = oldTargetI; arr[i] = oldTargetE; } }}
A Simple Solution is to use an auxiliary array temp[] of same size as given arrays. Traverse the given array and put all elements at their correct place in temp[] using index[]. Finally copy temp[] to arr[] and set all values of index[i] as i.
void reorder(int arr[], int index[], int n){ int temp[n]; // arr[i] should be present at index[i] index for (int i=0; i<n; i++) temp[index[i]] = arr[i]; // Copy temp[] to arr[] for (int i=0; i<n; i++) { arr[i] = temp[i]; index[i] = i; }}