Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.Comparator;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. public class SortByFreq {
  7. public static void main(String[] args) {
  8. Integer[] data0 = {1, 3, 2, 1, 1, 4, 2};
  9. sortByFreq(data0);
  10.  
  11. Integer[] data1 = {7, 1, 7, 3, 6, 2, 5, 4, 4, 5, 6, 7};
  12. sortByFreq(data1);
  13.  
  14. Integer[] data2 = {3, 2, 1, 4, 5, 3};
  15. sortByFreq(data2);
  16. }
  17.  
  18. /*
  19. * Sorting Priority
  20. * 1. Frequency (ascending)
  21. * 2. First Occurrence Index (ascending)
  22. */
  23. public static void sortByFreq(Integer[] list){
  24. Map<Integer, Integer> frq = new HashMap<Integer,Integer>();
  25. Map<Integer, Integer> idx = new HashMap<Integer,Integer>();
  26.  
  27. for (int i = 0; i < list.length; i++) {
  28. int x = list[i];
  29.  
  30. int f = frq.getOrDefault(x, 0);
  31. frq.put(x, f + 1);
  32.  
  33. if (!idx.containsKey(x))
  34. idx.put(x, i);
  35. }
  36.  
  37. SortComparator sComp = new SortComparator(frq,idx);
  38. Arrays.sort(list, sComp);
  39.  
  40. System.out.println("Result: " + Arrays.toString(list));
  41. }
  42.  
  43. }
  44.  
  45. class SortComparator implements Comparator<Integer>{
  46. private final Map<Integer, Integer> freqMap; //frequency map
  47. private final Map<Integer, Integer> indxMap; //index map
  48.  
  49. SortComparator(Map<Integer, Integer> fMap, Map<Integer, Integer> xMap){
  50. this.freqMap = fMap;
  51. this.indxMap = xMap;
  52. }
  53.  
  54. @Override
  55. public int compare(Integer o1, Integer o2) {
  56. int freqComp = freqMap.get(o1).compareTo(freqMap.get(o2));
  57. int indxComp = indxMap.get(o1).compareTo(indxMap.get(o2));
  58. //if the frequency are equal, then compare by index
  59. if (freqComp == 0) return indxComp;
  60. else return freqComp;
  61. }
  62.  
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement