int buscaBinaria (char *pal, int n, char **dic) {
int e = 0, m, d = n-1;
while (e <= d) {
m = (e + d)/2;
if (strcmp (dic[m], pal) <= 0) e = m + 1;
else d = m - 1;
}
return e;
}
// Recebe uma palavra, o tamanho de um vetor de strings e o
// próprio vetor para buscar a palavra recebida e devolve o
// índice mais próximo a essa palavra.
int buscaBinaria (char *pal, int n, char **dic) ...
i = buscaBinaria (pal, n, dic); printf ("palavra: %s\n", pal); // exemplo "dd" printf ("anterior ou igual: %s\n", dic[i]); // exemplo "ddd" printf ("seguinte: %s\n", dic[i+1]); // exemplo "eee"
// Recebe uma palavra pal e um vetor dic[0..n-1].
// Devolve índice e tal que dic[e-1] <= pal < dic[e].
int buscaBinaria (char *pal, int n, char **dic) ...
Como sei que <=
fica do lado esquerdo?
Resposta: quando strcmp (dic[m], pal)
é zero, o código reajusta e, não d.
i = fscanf (arq, "%d %d %d", a, b, c); if (i < 3) .... if (i == EOF) ....
PF$ man fscanf NAME scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - input format conversion SYNOPSIS ...
// Rearranja v[p..r] em ordem crescente. static void qcksrt (int v[], int p, int r) { . . . }
// Rearranja v[0..n-1] em ordem crescente.
// Consumo de tempo: em geral, proporcional a n log n.
// No pior caso (por exemplo, v ordenado): proporcional a n^2.
void quicksort (int *v, int n) {
qcksrt (v, 0, n-1);
}
qcksrt (v, 0, n);
void verificaOrdem (int *v, int n) {
int anterior, i, ordenado = TRUE;
if (n > 1) {
anterior = v[0];
for (i = 1; i < n && ordenado; i++) {
if (anterior > v[i])
ordenado = FALSE;
anterior = v[i];
}
}
if (ordenado) printf ("Ordenado\n");
else printf ("Nao Ordenado\n");
}
for (i = 1; i <= 4; i++) {
switch (i) {
case 1: insercao (v, n);
break;
case 2: mergesort (v, n);
break;
case 3: quicksort (v, n);
break;
case 4: heapsort (v, n);
break;
}
}
// Recebe um vetor de arquivos
// e o tamanho desse vetor, ...
//
int merge (FILE **arq, int n, FILE *out) {
// Recebe um vetor de tamanho n de arquivos
// e um inteiro i, no arquivo correspondente
// a arq[i] é lido seu próximo valor ...
//
container ppp (FILE **arq, int num) {
// Recebe um vetor v[0...n-1] fora de ordem // e o tamanho (int n) do vetor. // ... // void mergesort (int v[], int n);
// Essa função inclui chamada para duas outras // responsáveis por dividir e intercalar o vetor // e os sub vetores resultantes das divisões. // void mergesort (int n, int *v);
v = malloc (n * sizeof (int));
srand (55);
for (i = 0; i < n; ++i) v[i] = rand ();