package com.jadekler.sort;
import java.util.Arrays;
import java.util.Random;
/**
* This class sorts items in an array using mergesort
*/
public class Mergesort
{
public static void main(String args[]) {
int arrSize = 10;
Mergesort ms = new Mergesort();
Random rand = new Random();
int[] myArr = new int[arrSize];
for (int i = 0; i < arrSize; i++) {
myArr[i] = rand.nextInt(10000)+1;
}
System.out.println(ms.arrToString(myArr));
myArr = ms.sort(myArr);
System.out.println(ms.arrToString(myArr));
}
public String arrToString(int[] arr) {
String s = "";
for (int i = 0; i < arr.length; i++) {
if (i != 0) {
s += " ";
}
s += arr[i];
}
return s;
}
public int[] sort(int[] arr) {
if (arr.length == 1) {
return arr;
} else {
int[] leftArr = Arrays.copyOfRange(arr, 0, (int)Math.floor(arr.length/2));
leftArr = this.sort(leftArr);
int[] rightArr = Arrays.copyOfRange(arr, (int)Math.ceil(arr.length/2), arr.length);
rightArr = this.sort(rightArr);
return merge(leftArr, rightArr);
}
}
public int[] merge(int[] arr1, int[] arr2) {
int[] newArr = new int[arr1.length+arr2.length];
int x = 0;
int y = 0;
for (int i = 0; i < newArr.length; i++) {
if (y >= arr2.length || (x < arr1.length && arr1[x] < arr2[y])) {
newArr[i] = arr1[x];
x++;
} else {
newArr[i] = arr2[y];
y++;
}
}
return newArr;
}
}