Можно ли вставить новую строку в сортированный массив строк, используя алгоритм двоичного поиска?
У меня есть файл,который содержит список слов,которые расположены в алфавитном порядке.Сначала,когда я хотел вставить новое слово в файл,я просто зацикливался на строках файла в линейном времени.Затем я подумал:"поскольку все строки всегда упорядочены в алфавитном порядке,не могу ли я найти наилучшее положение для новой строки за логарифмическое время?".
P. S:Я знаю,что имя функции не имеет никакого отношения, поэтому, пожалуйста, не возражайте и извините за некоторые комментарии на моем родном языке.
Что я уже пробовал:
void insertion_sort(FILE** file_ptr,char* new_word) { int no_current_word = 0; int saved_position; char* current_word[SIZE]; char current_line[SIZE]; char* new_buffer=(char*)malloc(BUFFER_MAX_SIZE); *file_ptr = fopen("Lista cuvinte.txt", "r+"); while (fgets(current_line, BUFFER_MAX_SIZE, *file_ptr)) { current_word[no_current_word] = (char*)malloc(strlen(current_line)+1); strcpy(current_word[no_current_word], current_line); no_current_word++; } for (int i = 0; i < no_current_word; i++) { if (strcmp(current_word[i], new_word) > 0) { saved_position = i; break; } } current_word[no_current_word++] = (char*)malloc(10); //la un moment dat clar o sa fac update la aceasta abordare! if (strcmp(new_word, current_word[no_current_word - 2]) > 0) strcpy(current_word[no_current_word-1], new_word); else { for (int i = no_current_word - 1; i > saved_position; i--) strcpy(current_word[i], current_word[i - 1]); strcpy(current_word[saved_position], new_word); } strcpy(new_buffer, current_word[0]); for (int i = 1; i < no_current_word; i++) strcat(new_buffer, current_word[i]); *file_ptr = fopen("Lista cuvinte.txt", "w"); //va trebui sa resterg continutul atunci cand il voi re-updata fprintf(*file_ptr, "%s", new_buffer); rewind(*file_ptr); printf("%s", new_buffer); printf("\n\n"); } ```