sort 1st arr according to 2nd
import java.util.*;
public class Main {
static void printArray(int arr[], int n)
{
for (int i = 0; i < n; i++)
System.out.print(arr[i] + " ");
System.out.println();
}
public static int searchFirst(int temp[], int m, int x){
int l=0, r=m-1;
while(l < r){
int mid = l + (r-l)/2;
if((mid==0 || temp[mid-1]<x) && temp[mid] == x)
return mid;
if(x < temp[mid]) r = mid-1;
else l = mid+1;
}
return -1;
}
public static void sortAccording(int a1[], int a2[], int m, int n){
int temp[] = new int[m];
boolean visited[] = new boolean[m];
for(int i=0 ; i<m ; i++){
temp[i] = a1[i];
visited[i] = false;
}
Arrays.sort(temp);
int ind = 0;
for(int i=0 ; i<n ; i++){
int f = searchFirst(temp, m, a2[i]);
if(f == -1) continue;
for(int j=f ; j<m ; j++){
if(temp[j] == a2[i]){
a1[ind] = temp[j];
ind++;
visited[j] = true;
}
}
}
for(int i=0 ; i<m ; i++)
if(visited[i] == false)
a1[ind++] = temp[i];
}
public static void main(String args[])
{
int A1[] = { 2, 1, 2, 5, 7, 1, 9, 3, 6, 8, 8 };
int A2[] = { 2, 1, 8, 3 };
int m = A1.length;
int n = A2.length;
System.out.println("Sorted array is ");
sortAccording(A1, A2, m, n);
printArray(A1, m);
}
}