我的目标是理解为什么采用哨兵线性查找比使用标准线性查找更受青睐。
#include <stdio.h>
int linearSearch(int array[], int length) {
int elementToSearch;
printf("Insert the element to be searched: ");
scanf("%d", &elementToSearch);
for (int i = 0; i < length; i++) {
if (array[i] == elementToSearch) {
return i; // I found the position of the element requested
}
}
return -1; // The element to be searched is not in the array
}
int main() {
int myArray[] = {2, 4, 9, 2, 9, 10};
int myArrayLength = 6;
linearSearch(myArray, myArrayLength);
return 0;
}
维基百科提到:
另一种减少开销的方法是消除循环索引的所有检查。这可以通过将所需的项本身作为哨兵值插入到列表末尾来实现。
如果我使用哨兵实现线性搜索,我必须:
array[length + 1] = elementToSearch;
尽管如此,一旦找到要搜索的元素,循环就会停止检查数组的元素。使用哨兵进行线性搜索有什么意义呢?