用c语言写一个带哨兵的顺序查找法
时间: 2023-11-25 13:04:40 浏览: 145
以下是用C语言实现带哨兵的顺序查找法的示例代码:
```
#include <stdio.h>
int sequentialSearch(int arr[], int n, int x) {
int i = 0;
arr[n] = x; // 添加哨兵
while (arr[i] != x) {
i++;
}
if (i < n) {
return i;
}
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 7;
int index = sequentialSearch(arr, n, x);
if (index != -1) {
printf("%d is found at index %d.\n", x, index);
} else {
printf("%d is not found.\n", x);
}
return 0;
}
```
在顺序查找中,我们需要遍历整个数组来查找要查找的元素。但是,在遍历过程中,我们可以使用一个哨兵来避免每次比较都要检查数组是否越界。上面的代码中,在数组末尾添加了一个哨兵,当查找到哨兵时就可以立即结束查找。这样,我们可以在不增加额外开销的情况下提高查找效率。
相关问题
用C语言编程实现查找算法,无哨兵顺序查找的静态查找
好的,以下是用C语言编程实现无哨兵顺序查找的静态查找的代码:
```c
#include <stdio.h>
int seqSearch(int data[], int n, int key) {
int i;
for (i = 0; i < n; i++) {
if (data[i] == key) {
return i;
}
}
return -1;
}
int main() {
int data[] = {12, 45, 67, 89, 23, 56, 78, 90};
int n = sizeof(data) / sizeof(data[0]);
int key = 23;
int result = seqSearch(data, n, key);
if (result == -1) {
printf("The element is not found\n");
} else {
printf("The element is found at index %d\n", result);
}
return 0;
}
```
其中,data为待查找的数据,n为数据元素的个数,key为需要查找的元素值。函数返回值为所查找元素的下标,若未找到则返回-1。
这段代码中,我们定义了一个名为seqSearch的函数,用于实现无哨兵顺序查找。然后在main函数中,我们定义了一个data数组,将需要查找的元素值23作为key传入seqSearch函数进行查找,并将返回值存入result中。最后根据result的值输出查找结果。
C语言顺序查找法和折半查找法代码实现
以下是C语言实现顺序查找和折半查找的代码实现:
1. 顺序查找
```c
#include <stdio.h>
int SeqSearch(int r[], int n, int k) {
r[0] = k; // 下标0用作哨兵存放待查找的元素
int i;
for (i = n; r[i] != k; i--); // 从后往前查找
return i; // 返回查找到的元素下标,未找到返回0
}
int main() {
int r[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int n = sizeof(r) / sizeof(int) - 1; // 数组长度
int k = 5; // 待查找元素
int index = SeqSearch(r, n, k);
if (index) {
printf("找到元素%d了,在第%d个\n", k, index);
} else {
printf("找不到该元素%d\n", k);
}
return 0;
}
```
2. 折半查找
```c
#include <stdio.h>
int BinSearch(int r[], int n, int k) {
int low = 1, high = n, mid;
while (low <= high) {
mid = (low + high) / 2;
if (r[mid] == k) {
return mid;
} else if (r[mid] > k) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return 0; // 未找到返回0
}
int main() {
int r[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int n = sizeof(r) / sizeof(int) - 1; // 数组长度
int k = 5; // 待查找元素
int index = BinSearch(r, n, k);
if (index) {
printf("找到元素%d了,在第%d个\n", k, index);
} else {
printf("找不到该元素%d\n", k);
}
return 0;
}
```
阅读全文