

package SortingAlgorithm;
import java.util.Arrays;
import java.util.Random;
public class MergeSort {
public static void main(String[] args) {
Random rand = new Random();
int[] numbers = new int[10];
for(int i=0; i<numbers.length; i++){
numbers[i] = rand.nextInt(10); //bound: zero to million
}
System.out.println("Before MergeSort: ");
printArray(numbers);
mergeSort(numbers);
System.out.println("\nAfter MergeSort: ");
printArray(numbers);
}
private static void mergeSort(int[] inputArray){
int inputLength = inputArray.length;
//3. until one element (already sorted)
if(inputLength < 2){
return;
}
//1. devide in a half
int midIndex = inputLength / 2;
int[] leftHalf = new int[midIndex];
int[] rightHalf = new int[inputLength - midIndex];
for(int i=0; i<midIndex; i++){
leftHalf[i] = inputArray[i];
}
for(int i=midIndex; i<inputLength; i++){
rightHalf[i - midIndex] = inputArray[i];
}
//2. recursive call
mergeSort(leftHalf);
mergeSort(rightHalf);
//4. merge
merge(inputArray, leftHalf, rightHalf);
}
private static void merge(int[] inputArray, int[] leftHalf, int[] rightHalf){
int leftSize = leftHalf.length;
int rightSize = rightHalf.length;
//iterator for each array
int i=0, j=0, k=0;
while (i<leftSize && j<rightSize){
if(leftHalf[i] <= rightHalf[j]){ //compare each element
inputArray[k] = leftHalf[i]; //and put smaller one into an organized array
i++;
}else{
inputArray[k] = rightHalf[j];
j++;
}
k++;
}
//for leftover
while (i<leftSize){
inputArray[k] = leftHalf[i];
i++;
k++;
}
while (j<rightSize){
inputArray[k] = rightHalf[j];
j++;
k++;
}
//still remaining one
}
private static void printArray(int[] inputArray){
System.out.println(Arrays.toString(inputArray));
}
}
출처
https://www.youtube.com/watch?v=bOk35XmHPKs
https://www.youtube.com/watch?v=3j0SWDX4AtU