string name[size] = {"Collins, Bill", "Smith, Bart", "Michalski, Joe", "Griffin, Jim",
"Sanchez, Manny", "Rubin, Sarah", "Taylor, Tyrone", "Johnson, Jill",
"Allison, Jeff", "Moreno, Juan", "Wolfe, Bill", "Whitman, Jean",
"Moretti, Bella", "Wu, Hong", "Patel, Renee", "Harrison, Rose",
"Smith, Cathy", "Conroy, Pat", "Kelly, Sean", "Holland, Beth"};
int binarySearchIterative(string name[], int size, string empName) {
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (empName == name[mid]) {
return mid;
} else if (empName < name[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
因此,当我输入要搜索的名称时,我必须完全按照数组中列出的方式键入它。例如,如果我想找到比尔柯林斯。我必须输入它作为柯林斯,比尔。如果我输入比尔柯林斯,它会告诉我员工没有找到。我需要能够搜索名字First Last,而且不使用逗号。如果您需要查看更多我的代码,请告诉我。
答案 0 :(得分:2)
二进制搜索需要排序输入,您可以使用铅笔测试轻松检查:
假设您有一系列数字,例如1,5,8,10,12
,并且您正在寻找5
;首先猜测,你拆分系列并测试中间的数字,即8
。由于5
低于8
,很明显您不必在5
之上的一半中查找8
。然而,只有系列被排序,这种假设才有效;否则5
也可能在上半部分。
然后对您的输入进行排序,然后查看它是否有效。否则使用调试器: - )
答案 1 :(得分:0)
您需要实现一个比较函数(或代码),从字符串中提取名字和姓氏(作为单独的变量)。
提取后,您可以轻松地按名字或姓氏进行比较。
理想情况下,您应该有一个对数据建模的结构,例如:名字字段和姓氏字段。