Advertisement
teleias

Mergesort

Feb 4th, 2015
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.65 KB | None | 0 0
  1. //Here is an unreadable mergesort done with Lists, but low line count
  2.     public static List<Integer> mergesort(List<Integer> list)
  3.     {
  4.         if(list.size() == 1)
  5.             return list;
  6.        
  7.         int size = list.size();
  8.         List<Integer> a1 = new ArrayList<Integer>();
  9.         List<Integer> a2 = new ArrayList<Integer>();
  10.         List<Integer> answer = new ArrayList<Integer>();
  11.        
  12.         for(int i = 0; i < size; i++)
  13.             (i < Math.floor(size/2f)?a1:a2).add(list.get(i));
  14.        
  15.         a1 = mergesort(a1);
  16.         a2 = mergesort(a2);
  17.        
  18.         while(!(a1.size() == 0 && a2.size() == 0))
  19.             answer.add((a1.size()==0||a2.size()==0?(a1.size()==0?a2:a1):(a1.get(0)<=a2.get(0)?a1:a2)).remove(0));
  20.        
  21.         return answer;
  22.     }
  23.  
  24. //Here is mergesort done with Lists
  25.     public static List<Integer> mergesort(List<Integer> list)
  26.     {
  27.         if(list.size() == 1)
  28.             return list;
  29.        
  30.         int size = list.size();
  31.         List<Integer> a1 = new ArrayList<Integer>();
  32.         List<Integer> a2 = new ArrayList<Integer>();
  33.        
  34.         for(int i = 0; i < (int)Math.floor(size/2f); i++)
  35.             a1.add(list.get(i));
  36.         for(int i = (int)Math.ceil(size/2); i < size; i++)
  37.             a2.add(list.get(i));
  38.        
  39.         List<Integer> b1 = mergesort(a1);
  40.         List<Integer> b2 = mergesort(a2);
  41.         List<Integer> arr2 = new ArrayList<Integer>();
  42.         while(!(b1.size() == 0 && b2.size() == 0))
  43.             if(b1.size() == 0 || b2.size() == 0)
  44.                 if(b1.size() == 0)
  45.                     arr2.add(b2.remove(0));
  46.                 else
  47.                     arr2.add(b1.remove(0));
  48.             else
  49.                 if(b1.get(0) <= b2.get(0))
  50.                     arr2.add(b1.remove(0));
  51.                 else
  52.                     arr2.add(b2.remove(0));
  53.        
  54.         return arr2;
  55.     }
  56.  
  57.  
  58. //Here is mergesort done with arrays. Note that I wrote a 'pop' function that this relies on.
  59.     public static int[] mergesort(int[] list)
  60.     {
  61.         int size = list.length;
  62.         if(size == 1)
  63.             return list;
  64.        
  65.         int[] a1 = new int[(int)Math.floor(size/2f)];
  66.         int[] a2 = new int[(int)Math.ceil (size/2f)];
  67.        
  68.         int j;
  69.        
  70.         j = 0;
  71.         for(int i = 0; i < (int)Math.floor(size/2f); i++)
  72.             a1[j++] = list[i];
  73.         j = 0;
  74.         for(int i = (int)Math.ceil(size/2); i < size; i++)
  75.             a2[j++] = list[i];
  76.        
  77.         int[] b1 = mergesort(a1);
  78.         int[] b2 = mergesort(a2);
  79.         int[] arr2 = new int[size];
  80.         j = 0;
  81.         while(!(b1[0] == Integer.MIN_VALUE && b2[0] == Integer.MIN_VALUE))
  82.             if(b1[0] == Integer.MIN_VALUE || b2[0] == Integer.MIN_VALUE)
  83.                 if(b1[0] == Integer.MIN_VALUE)
  84.                     arr2[j++] = (pop(b2));
  85.                 else
  86.                     arr2[j++] = (pop(b1));
  87.             else
  88.                 if(b1[0] <= b2[0])
  89.                     arr2[j++] = (pop(b1));
  90.                 else
  91.                     arr2[j++] = (pop(b2));
  92.        
  93.         return arr2;
  94.     }
  95.     private static int pop(int[] arr)
  96.     {
  97.         int value = arr[0];
  98.         for(int i = 0; i < arr.length-1; i++)
  99.             arr[i] = arr[i+1];
  100.         arr[arr.length-1] = Integer.MIN_VALUE;
  101.         return value;
  102.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement