-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathHeapsort.c
More file actions
79 lines (74 loc) · 1.78 KB
/
Heapsort.c
File metadata and controls
79 lines (74 loc) · 1.78 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
79
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_LINHAS_DEBUG 20
#define TAM 8
int contador = 0;
void debug (char *str, int v[]){
int i;
printf ("%s", str);
for (i = 1; i <= TAM; i++)
printf ("%2d ", v[i]);
putchar('\n');
contador++;
if (contador == MAX_LINHAS_DEBUG){
system("pause");
contador = 0;
}
}
void InsereEmHeap (int m, int v[]) {
int f = m+1;
while /*X*/ (f > 1 && v[f/2] < v[f]) {
int t = v[f/2]; v[f/2] = v[f]; v[f] = t;
f = f/2;
}
debug("Insere: ", v);
}
void SacodeHeap (int m, int v[]) {
int t, f = 2;
while /*X*/ (f <= m) {
if (f < m && v[f] < v[f+1]) ++f;
if (v[f/2] >= v[f]) break;
t = v[f/2]; v[f/2] = v[f]; v[f] = t;
f *= 2;
}
debug("Sacode: ", v);
}
void Heapsort (int n, int v[]) {
int m;
debug("Inicio: ", v);
for (m = 1; m < n; m++)
InsereEmHeap (m, v);
for (m = n; /*X*/ m > 1; m--) {
int t = v[1]; v[1] = v[m]; v[m] = t;
SacodeHeap (m-1, v);
}
}
int RandomInteger (int low, int high)
{
int k;
double d;
d = (double) rand () / ((double) RAND_MAX + 1);
k = d * (high - low + 1);
return low + k;
}
void gera_vetor(int v[]){
int j, i, k;
for (i = 1; i< TAM+1; i++){
j = RandomInteger (1, 9);
for (k = 1; k < i; k++)
if ( v[k] == j )
break;
if(k == i)
v[i] = j;
else
i--;
}
}
int main (void){
int v[TAM+1] = {-1, 3, 1, 2, 7, 6, 4, 5, 0};
//gera_vetor(v);
Heapsort(TAM, v);
debug("Final : ", v);
system ("pause");
}