recursive fix + descending order fix

This commit is contained in:
nanometer5088
2023-04-20 17:14:05 -03:00
parent 3b652cf308
commit 48c9a36af2
3 changed files with 24 additions and 16 deletions

View File

@@ -2,25 +2,30 @@
#include <ctype.h>
#include "dicionario.h"
// Função que insere uma nova palavra no dicionário de palavras
int compare_strings(const void *a, const void *b) {
const char *str_a = *(const char **)a;
const char *str_b = *(const char **)b;
return strcmp(str_b, str_a);
}
// Função que insere uma nova palavra no dicionário de palavras em ordem decrescente
void insert_word(char **dict, int *size, char *word) {
if (*size == 0 || strcmp(word, dict[*size - 1]) < 0) {
dict[*size] = strdup(word); // adiciona a palavra no final do dicionário
(*size)++; // atualiza o tamanho do dicionário
if (*size == 0 || strcmp(word, dict[*size - 1]) >= 0) {
// adiciona a palavra no final do dicionário
dict[*size] = strdup(word);
(*size)++;
return;
}
// Encontra a posição correta para inserir a palavra em ordem decrescente
int i = 0;
while (i < *size && strcmp(word, dict[i]) < 0) {
i++;
// Encontra a posição correta para inserir a palavra
int i = *size - 1;
if (i >= 0 && strcmp(word, dict[i]) > 0) {
dict[i+1] = dict[i];
insert_word(dict, size, word);
} else {
dict[i+1] = strdup(word);
(*size)++; // atualiza o tamanho do dicionário
}
// Move as palavras maiores para a direita para abrir espaço para a nova palavra
for (int j = *size - 1; j >= i; j--) {
dict[j + 1] = dict[j];
}
// Insere a nova palavra
dict[i] = strdup(word);
(*size)++;
}
// Função que faz busca binária no dicionário de palavras

View File

@@ -4,6 +4,7 @@
// Declaração das funções
void insert_word(char **dict, int *size, char *word);
int compare_strings(const void *a, const void *b);
int binary_search(char **dict, int left, int right, char *word);
void to_lowercase(char *word);

4
main.c
View File

@@ -33,7 +33,9 @@ int main() {
insert_word(dict, &dict_size, word);
}
}
qsort(dict, dict_size, sizeof(char*), compare_strings);
// Fecha o arquivo de entrada
fclose(input_file);