-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathMergeSort.java
62 lines (48 loc) · 1.87 KB
/
MergeSort.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.util.Scanner;
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] entrada = sc.nextLine().split(" ");
int[] numeros = new int[entrada.length];
for (int i = 0; i < numeros.length; i++) {
numeros[i] = Integer.parseInt(entrada[i]);
}
sort(numeros, 0, numeros.length - 1);
System.out.println("Here's your sorted array: " + Arrays.toString(numeros));
}
public static void sort(int[] array, int leftIndex, int rightIndex) {
if(validate(array, leftIndex, rightIndex)) {
if (leftIndex < rightIndex) {
int middle = (leftIndex + rightIndex) / 2;
sort(array, leftIndex, middle);
sort(array, middle + 1, rightIndex);
merge(array, leftIndex, rightIndex);
}
}
}
private static void merge(int[] array, int leftIndex, int rightIndex) {
int[] arrayAux = Arrays.copyOf(array, array.length);
int start = leftIndex;
int middle = (leftIndex + rightIndex) / 2;
int secStart = middle + 1;
int count = leftIndex;
while (start <= middle && secStart <= rightIndex) {
if (arrayAux[start] <= arrayAux[secStart]) {
array[count++] = arrayAux[start++];
} else {
array[count++] = arrayAux[secStart++];
}
}
while (start <= middle) {
array[count++] = arrayAux[start++];
}
while (secStart <= rightIndex) {
array[count++] = arrayAux[secStart++];
}
}
private static boolean validate(int[] array, int leftIndex, int rightIndex) {
return (array != null && leftIndex >= 0 && rightIndex <= array.length - 1
&& array.length > 1);
}
}