-
Notifications
You must be signed in to change notification settings - Fork 0
/
mergeIntDecrescente.java
73 lines (64 loc) · 1.84 KB
/
mergeIntDecrescente.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
63
64
65
66
67
68
69
70
71
72
73
public class mergeIntDecrescente {
/*
* Descricao: apartir de um vetor de inteiros, essa
* funcao subdivide o vetor em outros dois e intercala
* seus elementos entre si no vetor principal
*
* Parametros: um vetor de inteiros (vetor a ser intercalado) e
* 3 inteiros (o primeiro, o ultimo e o indice do elemento do
* meio do vetor)
*/
public static void intercalar (int[] vet, int esq, int meio, int dir) {
int nEsq = (meio -esq) + 1;
int nDir = dir - meio;
int[] arrayEsq = new int[nEsq+1];
int[] arrayDir = new int[nDir+1];
//Sentinela no final dos dois arrays
arrayEsq[nEsq] = -0x7FFFFFFF;
arrayDir[nDir] = -0x7FFFFFFF;
int iEsq, iDir, i;
//Inicializar primeiro subarray
for (iEsq = 0; iEsq < nEsq; iEsq++){
arrayEsq[iEsq] = vet[esq+iEsq];
}
//Inicializar segundo subarray
for (iDir = 0; iDir < nDir; iDir++){
arrayDir[iDir] = vet[(meio + 1) + iDir];
}
//Intercalacao propriamente dita
for (iEsq = 0, iDir = 0, i = esq; i <= dir; i++){
if (arrayEsq[iEsq] >= arrayDir[iDir]) {
vet[i] = arrayEsq[iEsq];
iEsq++;
} else {
vet[i] = arrayDir[iDir];
iDir++;
}
}
}
/*
* Descricao: essa funcao ordena um vetor de inteiros
* em ordem crescente com o metodo mergesort
*
* Parametro: um vetor de inteiros (vetor a ser ordenado)
* e dois inteiros (indice do primeiro e do ultimo elemento do vetor)
*/
public static void merge (int[] vet, int esq, int dir) {
if (esq < dir) {
int meio = (esq + dir) /2;
merge(vet, esq, meio);
merge(vet, meio + 1, dir);
intercalar(vet, esq, meio, dir);
}
}
/*
* Descricao: essa funcao chama pela funcao merge
* para ordena o vetor em ordem crescente, possuindo
* argumentos mais simplificados
*
* Parametro: um vetor de inteiros (vetor a ser ordenado)
*/
public static void mergesort (int[] vet) {
merge (vet, 0, vet.length-1);
}
}