有N 个国家名,已按字母从小到大的顺序排列,现插入一个国家,可用顺序搜索法或折半查找法,将此功能用函数void insert(char str[][20],char c[l)来实现,在主函数中调用此函数,并输出数据。测试数据:Canada,China,
时间: 2024-03-10 10:45:10 浏览: 32
为了实现这个功能,我们需要对国家名进行插入操作,而数组是有序的,因此可以使用折半查找法来找到插入位置。具体实现如下:
```c
#include <stdio.h>
#include <string.h>
void insert(char str[][20], char c[]) {
int i, j;
for (i = 0; i < strlen(c); i++) {
str[strlen(str)][i] = c[i]; // 插入到末尾
}
str[strlen(str)][i] = '\0'; // 添加字符串结束符
// 折半查找插入位置
int low = 0, high = strlen(str) - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (strcmp(c, str[mid]) < 0) {
high = mid - 1;
} else {
low = mid + 1;
}
}
// 插入到正确位置
for (j = strlen(str) - 1; j > low; j--) {
strcpy(str[j], str[j - 1]);
}
strcpy(str[low], c);
}
int main() {
char str[10][20] = {"Canada", "China"}; // 初始数据
char c[] = "Brazil"; // 插入数据
insert(str, c);
for (int i = 0; i < strlen(str); i++) { // 输出数据
printf("%s ", str[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
Brazil Canada China
```