forked from sakshamchecker/Hacktoberfest-21
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmergeSort.java
59 lines (49 loc) · 1.29 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
// Time : O(n*(log n))
// Space : O(n)
import java.util.Arrays;
public class Main
{
public static void main(String[] args) {
int[] nums = {87,98,4,65,14,13,12,-34,-345,65,12,19,50,0,1};
System.out.println(Arrays.toString(nums));
mergeSort(nums);
System.out.println(Arrays.toString(nums));
}
static void mergeSort(int[] arr) {
int size = arr.length;
int mid = size/2;
// single element
if (size<2) return;
// divide into two arrays
int[] left = new int[mid];
int[] right = new int[size-mid];
for (int i=0; i<mid; i++) {
left[i] = arr[i];
}
for (int i=mid; i<size; i++) {
right[i-mid] = arr[i];
}
mergeSort(left);
mergeSort(right);
merge(arr,left,right);
}
static void merge(int[] arr, int[] left, int[] right) {
int leftsize = left.length;
int rightsize = right.length;
// compare and copy (merge) elements into original array
int i=0, j=0, k=0;
while (i<leftsize && j<rightsize) {
if (left[i]<=right[j]) {
arr[k++] = left[i++];
}else{
arr[k++] = right[j++];
}
}
while (i<leftsize) {
arr[k++] = left[i++];
}
while (j<rightsize) {
arr[k++] = right[j++];
}
}
}