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);
}

}