从c语言实现有N 个国家名,已按字母从小到大的顺序排列,现插入一个国家,可用顺序搜索法或折半查找法,将此功能用函数void insert(char str[][20],char c[l)来实现,在主函数中调用此函数,并输出数据。测试数据:Canada,China,England,Korea,USA,要插入 Japan,
时间: 2024-03-10 18:45:11 浏览: 89
C语言程序设计-任输入五个国家的名字,按由小到大排序
5星 · 资源好评率100%
好的,那么我们先来实现使用顺序搜索法来插入一个国家名的功能:
```c
#include <stdio.h>
#include <string.h>
void insert(char str[][20], char c[]) {
int i;
for (i = 0; i < strlen(str); i++) {
if (strcmp(c, str[i]) < 0) { // 找到插入位置
break;
}
}
for (int j = strlen(str); j > i; j--) { // 插入到正确位置
strcpy(str[j], str[j - 1]);
}
strcpy(str[i], c);
}
int main() {
char str[10][20] = {"Canada", "China", "England", "Korea", "USA"}; // 初始数据
char c[] = "Japan"; // 插入数据
insert(str, c);
for (int i = 0; i < strlen(str); i++) { // 输出数据
printf("%s ", str[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
Canada China England Japan Korea USA
```
接下来我们再来实现使用折半查找法来插入一个国家名的功能:
```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", "England", "Korea", "USA"}; // 初始数据
char c[] = "Japan"; // 插入数据
insert(str, c);
for (int i = 0; i < strlen(str); i++) { // 输出数据
printf("%s ", str[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
Canada China England Japan Korea USA
```
阅读全文