package com.kartik.sorting;
import com.kartik.sorting.tree.BTreePrinter;
/**
*
* @author MandalKC
*
*/
public class MergeSort {
private int[] array;
private int[] tempMergArr;
private int length;
public static void main(String a[]){
int[] inputArr = {45,23,11,89,77,98,4,28,65,43};
MergeSort mms = new MergeSort();
mms.sort(inputArr);
}
private void printNumbers(int[] input) {
for (int i = 0; i < input.length; i++) {
System.out.print(input[i] + ", ");
} System.out.println("\n");
}
public void sort(int inputArr[]) {
System.out.println("Before merge Soring --->>");
printNumbers(inputArr);
System.out.println("After merge Soring start--->>");
this.array = inputArr;
this.length = inputArr.length;
this.tempMergArr = new int[length];
doMergeSort(0, length - 1);
}
private void doMergeSort(int lowerIndex, int higherIndex) {
if (lowerIndex < higherIndex) {
int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
// Below step sorts the left side of the array
doMergeSort(lowerIndex, middle);
// Below step sorts the right side of the array
doMergeSort(middle + 1, higherIndex);
// Now merge both sides
mergeParts(lowerIndex, middle, higherIndex);
}
}
private void mergeParts(int lowerIndex, int middle, int higherIndex) {
for (int i = lowerIndex; i <= higherIndex; i++) {
tempMergArr[i] = array[i];
}
int i = lowerIndex;
int j = middle + 1;
int k = lowerIndex;
while (i <= middle && j <= higherIndex) {
if (tempMergArr[i] <= tempMergArr[j]) {
array[k] = tempMergArr[i];
i++;
} else {
array[k] = tempMergArr[j];
j++;
}
k++;
BTreePrinter.printNode(HeapSort.drawTree(array));
printNumbers(array);
}
while (i <= middle) {
array[k] = tempMergArr[i];
k++;
i++;
BTreePrinter.printNode(HeapSort.drawTree(array));
printNumbers(array);
}
}
}
Out Put:
Before merge Soring --->>
45, 23, 11, 89, 77, 98, 4, 28, 65, 43,
After merge Soring start--->>
23
/ \
/ \
/ \
/ \
23 11
/ \ / \
/ \ / \
89 77 98 4
/ \ /
28 65 43
23, 23, 11, 89, 77, 98, 4, 28, 65, 43,
23
/ \
/ \
/ \
/ \
45 11
/ \ / \
/ \ / \
89 77 98 4
/ \ /
28 65 43
23, 45, 11, 89, 77, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
45 11
/ \ / \
/ \ / \
89 77 98 4
/ \ /
28 65 43
11, 45, 11, 89, 77, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 11
/ \ / \
/ \ / \
89 77 98 4
/ \ /
28 65 43
11, 23, 11, 89, 77, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
89 77 98 4
/ \ /
28 65 43
11, 23, 45, 89, 77, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 77 98 4
/ \ /
28 65 43
11, 23, 45, 77, 77, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 98 4
/ \ /
28 65 43
11, 23, 45, 77, 89, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 98 4
/ \ /
28 65 43
11, 23, 45, 77, 89, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 98 4
/ \ /
28 65 43
11, 23, 45, 77, 89, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 98 4
/ \ /
28 65 43
11, 23, 45, 77, 89, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 4
/ \ /
28 65 43
11, 23, 45, 77, 89, 4, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 98
/ \ /
28 65 43
11, 23, 45, 77, 89, 4, 98, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 98
/ \ /
28 65 43
11, 23, 45, 77, 89, 4, 98, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
28 65 43
11, 23, 45, 77, 89, 4, 28, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
98 65 43
11, 23, 45, 77, 89, 4, 28, 98, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
98 43 43
11, 23, 45, 77, 89, 4, 28, 98, 43, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
98 43 65
11, 23, 45, 77, 89, 4, 28, 98, 43, 65,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
98 43 65
11, 23, 45, 77, 89, 4, 28, 98, 43, 65,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
98 43 65
11, 23, 45, 77, 89, 4, 28, 98, 43, 65,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 43 65
11, 23, 45, 77, 89, 4, 28, 43, 43, 65,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 65 65
11, 23, 45, 77, 89, 4, 28, 43, 65, 65,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 65 98
11, 23, 45, 77, 89, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 65 98
4, 23, 45, 77, 89, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 65 98
4, 11, 45, 77, 89, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 65 98
4, 11, 23, 77, 89, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 89 4 28
/ \ /
43 65 98
4, 11, 23, 28, 89, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 43 4 28
/ \ /
43 65 98
4, 11, 23, 28, 43, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 43 45 28
/ \ /
43 65 98
4, 11, 23, 28, 43, 45, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 43 45 65
/ \ /
43 65 98
4, 11, 23, 28, 43, 45, 65, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 43 45 65
/ \ /
77 65 98
4, 11, 23, 28, 43, 45, 65, 77, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 43 45 65
/ \ /
77 89 98
4, 11, 23, 28, 43, 45, 65, 77, 89, 98,
import com.kartik.sorting.tree.BTreePrinter;
/**
*
* @author MandalKC
*
*/
public class MergeSort {
private int[] array;
private int[] tempMergArr;
private int length;
public static void main(String a[]){
int[] inputArr = {45,23,11,89,77,98,4,28,65,43};
MergeSort mms = new MergeSort();
mms.sort(inputArr);
}
private void printNumbers(int[] input) {
for (int i = 0; i < input.length; i++) {
System.out.print(input[i] + ", ");
} System.out.println("\n");
}
public void sort(int inputArr[]) {
System.out.println("Before merge Soring --->>");
printNumbers(inputArr);
System.out.println("After merge Soring start--->>");
this.array = inputArr;
this.length = inputArr.length;
this.tempMergArr = new int[length];
doMergeSort(0, length - 1);
}
private void doMergeSort(int lowerIndex, int higherIndex) {
if (lowerIndex < higherIndex) {
int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
// Below step sorts the left side of the array
doMergeSort(lowerIndex, middle);
// Below step sorts the right side of the array
doMergeSort(middle + 1, higherIndex);
// Now merge both sides
mergeParts(lowerIndex, middle, higherIndex);
}
}
private void mergeParts(int lowerIndex, int middle, int higherIndex) {
for (int i = lowerIndex; i <= higherIndex; i++) {
tempMergArr[i] = array[i];
}
int i = lowerIndex;
int j = middle + 1;
int k = lowerIndex;
while (i <= middle && j <= higherIndex) {
if (tempMergArr[i] <= tempMergArr[j]) {
array[k] = tempMergArr[i];
i++;
} else {
array[k] = tempMergArr[j];
j++;
}
k++;
BTreePrinter.printNode(HeapSort.drawTree(array));
printNumbers(array);
}
while (i <= middle) {
array[k] = tempMergArr[i];
k++;
i++;
BTreePrinter.printNode(HeapSort.drawTree(array));
printNumbers(array);
}
}
}
Out Put:
Before merge Soring --->>
45, 23, 11, 89, 77, 98, 4, 28, 65, 43,
After merge Soring start--->>
23
/ \
/ \
/ \
/ \
23 11
/ \ / \
/ \ / \
89 77 98 4
/ \ /
28 65 43
23, 23, 11, 89, 77, 98, 4, 28, 65, 43,
23
/ \
/ \
/ \
/ \
45 11
/ \ / \
/ \ / \
89 77 98 4
/ \ /
28 65 43
23, 45, 11, 89, 77, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
45 11
/ \ / \
/ \ / \
89 77 98 4
/ \ /
28 65 43
11, 45, 11, 89, 77, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 11
/ \ / \
/ \ / \
89 77 98 4
/ \ /
28 65 43
11, 23, 11, 89, 77, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
89 77 98 4
/ \ /
28 65 43
11, 23, 45, 89, 77, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 77 98 4
/ \ /
28 65 43
11, 23, 45, 77, 77, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 98 4
/ \ /
28 65 43
11, 23, 45, 77, 89, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 98 4
/ \ /
28 65 43
11, 23, 45, 77, 89, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 98 4
/ \ /
28 65 43
11, 23, 45, 77, 89, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 98 4
/ \ /
28 65 43
11, 23, 45, 77, 89, 98, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 4
/ \ /
28 65 43
11, 23, 45, 77, 89, 4, 4, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 98
/ \ /
28 65 43
11, 23, 45, 77, 89, 4, 98, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 98
/ \ /
28 65 43
11, 23, 45, 77, 89, 4, 98, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
28 65 43
11, 23, 45, 77, 89, 4, 28, 28, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
98 65 43
11, 23, 45, 77, 89, 4, 28, 98, 65, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
98 43 43
11, 23, 45, 77, 89, 4, 28, 98, 43, 43,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
98 43 65
11, 23, 45, 77, 89, 4, 28, 98, 43, 65,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
98 43 65
11, 23, 45, 77, 89, 4, 28, 98, 43, 65,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
98 43 65
11, 23, 45, 77, 89, 4, 28, 98, 43, 65,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 43 65
11, 23, 45, 77, 89, 4, 28, 43, 43, 65,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 65 65
11, 23, 45, 77, 89, 4, 28, 43, 65, 65,
11
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 65 98
11, 23, 45, 77, 89, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
23 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 65 98
4, 23, 45, 77, 89, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 45
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 65 98
4, 11, 45, 77, 89, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
77 89 4 28
/ \ /
43 65 98
4, 11, 23, 77, 89, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 89 4 28
/ \ /
43 65 98
4, 11, 23, 28, 89, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 43 4 28
/ \ /
43 65 98
4, 11, 23, 28, 43, 4, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 43 45 28
/ \ /
43 65 98
4, 11, 23, 28, 43, 45, 28, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 43 45 65
/ \ /
43 65 98
4, 11, 23, 28, 43, 45, 65, 43, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 43 45 65
/ \ /
77 65 98
4, 11, 23, 28, 43, 45, 65, 77, 65, 98,
4
/ \
/ \
/ \
/ \
11 23
/ \ / \
/ \ / \
28 43 45 65
/ \ /
77 89 98
4, 11, 23, 28, 43, 45, 65, 77, 89, 98,