-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainLesson3_3.java
More file actions
78 lines (62 loc) · 2.16 KB
/
MainLesson3_3.java
File metadata and controls
78 lines (62 loc) · 2.16 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package ru.MylearnCh1J1L1;
import java.util.Random;
import java.util.Arrays;
public class MainLesson3_3 {
public static void main(String[] args) {
int[] intArray = getRandArray(10, 100);
printArray(" ", intArray);
int[] resArray = mergeSort(intArray);
printArray(" ", resArray);
}
public static int[] mergeSort(int[] array) {
if (array.length <= 1) return array;
int[] left = Arrays.copyOfRange(array, 0, array.length / 2);
int[] right = Arrays.copyOfRange(array, left.length, array.length);
int[] result = merge(mergeSort(left), mergeSort(right));
return result;
}
public static int[] merge(int[] left, int[] right) {
int[] result = new int[left.length + right.length];
int currInd = 0;
int leftInd = 0;
int rightInd = 0;
while (leftInd < left.length && rightInd < right.length)
if (left[leftInd] < right[rightInd]){
result[currInd] = left[leftInd];
currInd++;
leftInd++;
}
else {
result[currInd] = right[rightInd];
currInd++;
rightInd++;
}
while (currInd < result.length)
if (leftInd != left.length){
result[currInd] = left[leftInd];
currInd++;
leftInd++;
}
else {
result[currInd] = right[rightInd];
currInd++;
rightInd++;
}
return result;
}
public static void printArray(String sep, int[] array) {
for (int i = 0; i < array.length; i++) {
if (i == array.length - 1) {
System.out.println(array[i]);
break;
}
System.out.print(array[i] + sep);
}
}
public static int[] getRandArray(int size, int maxValue) {
Random rand = new Random();
int[] array = new int[size];
for (int i = 0; i < size; i++) array[i] = rand.nextInt(maxValue);
return array;
}
}