以下是 哨兵排序 检查是否有误int SeqSearch2(int r[ ], int n, int k) { r[0] = k; i=n; while (r[i]!=k) --i; return i; }
时间: 2024-05-17 10:17:03 浏览: 73
高级语言程序设计查找补充2022优秀文档.ppt
你给出的代码实现中存在错误。
在这个算法中,我们将要查找的关键字 k 存放在 r[0] 中,作为哨兵。这样,在查找时就不需要每次都判断是否已经到达了数组的边界。当查找到要查找的元素或者查找结束时,返回其下标即可。如果最终 i=0,说明查找失败,返回 -1。
下面是正确的代码实现:
```c++
int SeqSearch2(int r[], int n, int k) {
r[0] = k; // 将关键字 k 存放在 r[0] 中,作为哨兵
int i = n;
while (r[i] != k) {
i--;
}
if (i == 0) {
return -1; // 查找失败,返回 -1
} else {
return i; // 返回下标
}
}
```
需要注意的是,在该算法中,我们修改了数组的第一个元素。因此,在实际使用时,需要确保该数组不会被其他代码使用,或者在使用完该算法后将数组恢复原状。
阅读全文