|
1 | 1 | class MergeSort { |
2 | | - void merge(int vetor[], int inicio, int meio, int fim) { |
3 | | - int n1 = meio - inicio + 1; |
4 | | - int n2 = fim - meio; |
5 | | - int Inicial[] = new int[n1]; |
6 | | - int Final[] = new int[n2]; |
7 | | - for (int i = 0; i < n1; ++i) Inicial[i] = vetor[inicio + i]; |
8 | | - for (int j = 0; j < n2; ++j) Final[j] = vetor[meio + 1 + j]; |
| 2 | + void merge(int array[], int start, int middle, int end) { |
| 3 | + int n1 = middle - start + 1; |
| 4 | + int n2 = end - middle; |
| 5 | + int Left[] = new int[n1]; |
| 6 | + int Right[] = new int[n2]; |
| 7 | + for (int i = 0; i < n1; ++i) Left[i] = array[start + i]; |
| 8 | + for (int j = 0; j < n2; ++j) Right[j] = array[middle + 1 + j]; |
9 | 9 | int i = 0, j = 0; |
10 | | - int k = inicio; |
| 10 | + int k = start; |
11 | 11 | while (i < n1 && j < n2) { |
12 | | - if (Inicial[i] <= Final[j]) { |
13 | | - vetor[k] = Inicial[i]; |
| 12 | + if (Left[i] <= Right[j]) { |
| 13 | + array[k] = Left[i]; |
14 | 14 | i++; |
15 | 15 | } else { |
16 | | - vetor[k] = Final[j]; |
| 16 | + array[k] = Right[j]; |
17 | 17 | j++; |
18 | 18 | } |
19 | 19 | k++; |
20 | 20 | } |
21 | 21 | while (i < n1) { |
22 | | - vetor[k] = Inicial[i]; |
| 22 | + array[k] = Left[i]; |
23 | 23 | i++; |
24 | 24 | k++; |
25 | 25 | } |
26 | 26 | while (j < n2) { |
27 | | - vetor[k] = Final[j]; |
| 27 | + array[k] = Right[j]; |
28 | 28 | j++; |
29 | 29 | k++; |
30 | 30 | } |
31 | 31 | } |
32 | 32 |
|
33 | | - void sort(int vetor[], int inicio, int fim) { |
34 | | - if (inicio < fim) { |
35 | | - int meio = (inicio + fim) / 2; |
36 | | - sort(vetor, inicio, meio); |
37 | | - sort(vetor, meio + 1, fim); |
38 | | - merge(vetor, inicio, meio, fim); |
| 33 | + void sort(int array[], int start, int end) { |
| 34 | + if (start < end) { |
| 35 | + int middle = (start + end) / 2; |
| 36 | + sort(array, start, middle); |
| 37 | + sort(array, middle + 1, end); |
| 38 | + merge(array, start, middle, end); |
39 | 39 | } |
40 | 40 | } |
41 | 41 | } |
0 commit comments