Сломанный бинарный поиск и Bubble sort

Мне действительно нужна помощь в решении этой проблемы, в этой программе, которую мы должны отлаживать, есть ошибки, которые я не могу найти.

Программа имеет массив имен и должна сортировать имена по алфавиту, а затем позволить пользователю искать имя.

Похоже, сортировка по пузырькам ничего не делает, и поиск всегда говорит, что имя не может быть найдено.

Некоторая помощь будет отличной, как это исправить. Спасибо.

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

#define NUM_OF_NAMES 8
#define NAME_SIZE 5

void printNames(char names[][5], int size);
void bubbleSortNames(char names[][5], int last);
bool binarySearchNames(char list[][5], int end, char target[], int *location);

int main()
{
        char nameList[8][5]={"Zack","Jake","Jill","Seth","Eric","Beth","Hugh","Rita"},
                  searchText[5],
                  userChoice;
        int  searchLocation,
                  last = 0;

        printNames(nameList, 8);

        printf("\n\nLIST AFTER SORT\n\n");

        bubbleSortNames(nameList, last);
        printNames(nameList, 8);

        printf("Would youy like to search for a name? (y/n) ");
        scanf(" %c", &userChoice);

        while(userChoice == 'y')
        {
                printf("\nPlease try and search for a name: ");
                scanf("%20s", searchText);

                if(binarySearchNames(nameList, 8, searchText, &searchLocation))
                        printf("\nThe name %s was not found. :(\n", searchText);

                else
                        printf("\nThe name %s was found at location %d!", searchText, searchLocation);

                printf("\nWould you like to search for another name? (y/n) ");
                scanf(" %c", &userChoice);
        }
        printf("\nThank you for using this program.\n\n");

        return 0;
}

/*
 Prints out array of names
*/
void printNames(char names[][NAME_SIZE], int size)
{
        for(int index = 0; index <= size; index++)
        puts(names[index]);
        return;
}
/*
 Sorts names alphabetically
*/
void bubbleSortNames(char names[][NAME_SIZE], int last)
{
        char temp[NAME_SIZE];

        for(int current = 0; current < last; current++)
                {
                        for(int walker = last; walker > current; walker--)
                                if(strcmp(names[walker], names[walker - 1]))
                                {
                                        strcpy(temp, names[walker]);
                                        strcpy(names[walker], names[walker - 1]);
                                        strcpy(names[walker - 1], temp);
                                }
                }
        return;
        }
/*
 Searches for name entered
*/
bool binarySearchNames(char list[][NAME_SIZE], int end, char target[], int *location)
{
        char first = 0,
             last = end,
             mid;

        while(first <= last)
        {
                mid = (first + last) / 2;

                if(target > list[mid])
                         first = mid + 1;
                else if(target < list[mid])
                        last = mid - 1;
                else
                        first = last +  1;
        }

        *location = mid;
        return target = list[mid];
}

1 ответ

1) неправильный номер

last = 0; ----> last = NUM_OF_NAMES -1;

2) Исполнение заявления противоположно условиям. и 8 ----> последний

if(binarySearchNames(nameList, 8, searchText, &searchLocation))
    printf("\nThe name %s was not found. :(\n", searchText);
else
    printf("\nThe name %s was found at location %d!", searchText, searchLocation);

3) в printNames

index <= size ----> index < size или позвоните по 8 ----> позвоните последним

4) на bubbleSortNames

if(strcmp(names[walker], names[walker - 1]))

в

if(strcmp(names[walker], names[walker - 1])<0)

5) в двоичных поисках имен

использование strcmp сравнить строки

Другие вопросы по тегам