Given an array of integers. This array denotes ‘our’ own ascending order of the elements. So if the array is {2,3,1,4}, by mathematics we can say that 2<3<1<4. Given another array, sort this new array in ‘our’ ascending order.
Let’s say the new array is {1,2,4,3,5,4,9,2}, output will be {2,2,3,1,4,4,5,9}. Note that since 5 and 9 do not occur, they are sorted by actual ascending order at the end.
Let’s say the new array is {1,2,4,3,5,4,9,2}, output will be {2,2,3,1,4,4,5,9}. Note that since 5 and 9 do not occur, they are sorted by actual ascending order at the end.
import java.util.*;
/**
* Created by Arun on 8/9/14.
*/
public class CustomizedSort {
public static ArrayList<Integer> sort(int customSortList[], Integer arr[]){
Map<Integer, Integer> mp = new LinkedHashMap<Integer, Integer>();
for(int i=0;i<customSortList.length;i++) {
mp.put(customSortList[i], i);
}
System.out.println(mp);
List<Integer> a = Arrays.asList(arr);
Collections.sort(a);
arr = a.toArray(new Integer[arr.length]);
ArrayList<Integer> newArr = new ArrayList<Integer> (arr.length);
Iterator it = mp.entrySet().iterator();
while (it.hasNext()){
Map.Entry pairs = (Map.Entry)it.next();
int key = (Integer)pairs.getKey();
for(int i=0;i<a.size();i++){
if(a.get(i)==key){
newArr.add(key);
}
}
}
for(int i=0;i<a.size();i++){
if (!newArr.contains(a.get(i))){
newArr.add(a.get(i));
}
}
return newArr;
}
public static void main(String args[]){
int customSortList[] = {2,3,1,4};
Integer arr [] = {1,2,4,3,5,4,9,2};
System.out.println(sort(customSortList, arr));
}
}
No comments:
Post a Comment