Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Here is an unreadable mergesort done with Lists, but low line count
- public static List<Integer> mergesort(List<Integer> list)
- {
- if(list.size() == 1)
- return list;
- int size = list.size();
- List<Integer> a1 = new ArrayList<Integer>();
- List<Integer> a2 = new ArrayList<Integer>();
- List<Integer> answer = new ArrayList<Integer>();
- for(int i = 0; i < size; i++)
- (i < Math.floor(size/2f)?a1:a2).add(list.get(i));
- a1 = mergesort(a1);
- a2 = mergesort(a2);
- while(!(a1.size() == 0 && a2.size() == 0))
- answer.add((a1.size()==0||a2.size()==0?(a1.size()==0?a2:a1):(a1.get(0)<=a2.get(0)?a1:a2)).remove(0));
- return answer;
- }
- //Here is mergesort done with Lists
- public static List<Integer> mergesort(List<Integer> list)
- {
- if(list.size() == 1)
- return list;
- int size = list.size();
- List<Integer> a1 = new ArrayList<Integer>();
- List<Integer> a2 = new ArrayList<Integer>();
- for(int i = 0; i < (int)Math.floor(size/2f); i++)
- a1.add(list.get(i));
- for(int i = (int)Math.ceil(size/2); i < size; i++)
- a2.add(list.get(i));
- List<Integer> b1 = mergesort(a1);
- List<Integer> b2 = mergesort(a2);
- List<Integer> arr2 = new ArrayList<Integer>();
- while(!(b1.size() == 0 && b2.size() == 0))
- if(b1.size() == 0 || b2.size() == 0)
- if(b1.size() == 0)
- arr2.add(b2.remove(0));
- else
- arr2.add(b1.remove(0));
- else
- if(b1.get(0) <= b2.get(0))
- arr2.add(b1.remove(0));
- else
- arr2.add(b2.remove(0));
- return arr2;
- }
- //Here is mergesort done with arrays. Note that I wrote a 'pop' function that this relies on.
- public static int[] mergesort(int[] list)
- {
- int size = list.length;
- if(size == 1)
- return list;
- int[] a1 = new int[(int)Math.floor(size/2f)];
- int[] a2 = new int[(int)Math.ceil (size/2f)];
- int j;
- j = 0;
- for(int i = 0; i < (int)Math.floor(size/2f); i++)
- a1[j++] = list[i];
- j = 0;
- for(int i = (int)Math.ceil(size/2); i < size; i++)
- a2[j++] = list[i];
- int[] b1 = mergesort(a1);
- int[] b2 = mergesort(a2);
- int[] arr2 = new int[size];
- j = 0;
- while(!(b1[0] == Integer.MIN_VALUE && b2[0] == Integer.MIN_VALUE))
- if(b1[0] == Integer.MIN_VALUE || b2[0] == Integer.MIN_VALUE)
- if(b1[0] == Integer.MIN_VALUE)
- arr2[j++] = (pop(b2));
- else
- arr2[j++] = (pop(b1));
- else
- if(b1[0] <= b2[0])
- arr2[j++] = (pop(b1));
- else
- arr2[j++] = (pop(b2));
- return arr2;
- }
- private static int pop(int[] arr)
- {
- int value = arr[0];
- for(int i = 0; i < arr.length-1; i++)
- arr[i] = arr[i+1];
- arr[arr.length-1] = Integer.MIN_VALUE;
- return value;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement