Сломанный бинарный поиск и 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
сравнить строки