-
Notifications
You must be signed in to change notification settings - Fork 267
/
MergeSort.c
72 lines (57 loc) · 1.35 KB
/
MergeSort.c
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
/*
* Exemplo de Ordenação utilizando Merge Sort
*
* Dividir para conquistar:
*
* Dividir: Dividir os dados em subsequências pequenas;
* Conquistar: Classificar as duas metades recursivamente aplicando o merge
*sort; Combinar: Juntar as duas metades em um único conjunto já classificado.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TAM_VETOR 100
void merge(int vetor[], int tamanho) {
int meio = tamanho / 2;
int i = 0, j = meio, k = 0;
int aux[tamanho];
while (i < meio && j < tamanho) {
if (vetor[i] <= vetor[j])
aux[k] = vetor[i++];
else
aux[k] = vetor[j++];
k++;
}
if (i == meio)
while (j < tamanho)
aux[k++] = vetor[j++];
else
while (i < meio)
aux[k++] = vetor[i++];
for (i = 0; i < tamanho; i++)
vetor[i] = aux[i];
}
int mergeSort(int vetor[], int tamanho) {
int meio = tamanho / 2;
if (tamanho > 1) {
mergeSort(vetor, meio);
mergeSort(vetor + meio, tamanho - meio);
merge(vetor, tamanho);
}
}
int main() {
int vetor[TAM_VETOR];
// Preenche o vetor com valores aleatórios 0-1000
srand(time(NULL));
for (int i = 0; i < TAM_VETOR; i++) {
vetor[i] = rand() % 1000;
printf("%d, ", vetor[i]);
}
printf("\n\n");
mergeSort(vetor, TAM_VETOR);
for (int i = 0; i < TAM_VETOR; i++) {
printf("%d, ", vetor[i]);
}
return 0;
}