1.输入一组关键字并存储。 2.用不同排序算法对关键字进行排序 3.给一关键字序列,查找给定关键字所在的位序,若不在表中,则返回0。用c语言
时间: 2023-12-16 17:06:21 浏览: 156
以下是使用C语言实现对关键字的存储、排序和查找的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_KEYWORDS 100 // 关键字的最大数量
// 定义关键字结构体
typedef struct Keyword {
char word[20]; // 关键字
int index; // 关键字在原始序列中的位置
} Keyword;
// 插入排序算法实现
void insertion_sort(Keyword *keywords, int n) {
int i, j;
Keyword temp;
for (i = 1; i < n; i++) {
temp = keywords[i];
j = i - 1;
while (j >= 0 && strcmp(keywords[j].word, temp.word) > 0) {
keywords[j + 1] = keywords[j];
j--;
}
keywords[j + 1] = temp;
}
}
// 快速排序算法实现
void quick_sort(Keyword *keywords, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
Keyword pivot = keywords[left];
while (i < j) {
while (i < j && strcmp(keywords[j].word, pivot.word) >= 0) {
j--;
}
keywords[i] = keywords[j];
while (i < j && strcmp(keywords[i].word, pivot.word) <= 0) {
i++;
}
keywords[j] = keywords[i];
}
keywords[i] = pivot;
quick_sort(keywords, left, i - 1);
quick_sort(keywords, i + 1, right);
}
// 二分查找算法实现
int binary_search(Keyword *keywords, int n, char *word) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (strcmp(keywords[mid].word, word) == 0) {
return keywords[mid].index;
} else if (strcmp(keywords[mid].word, word) < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return 0;
}
int main() {
int n, i;
Keyword keywords[MAX_KEYWORDS];
char word[20];
// 读取关键字数量和关键字序列
printf("请输入关键字的数量:");
scanf("%d", &n);
printf("请输入关键字序列:\n");
for (i = 0; i < n; i++) {
scanf("%s", keywords[i].word);
keywords[i].index = i + 1;
}
// 使用插入排序对关键字进行排序
insertion_sort(keywords, n);
// 输出排序结果
printf("插入排序结果:\n");
for (i = 0; i < n; i++) {
printf("%s ", keywords[i].word);
}
printf("\n");
// 使用快速排序对关键字进行排序
quick_sort(keywords, 0, n - 1);
// 输出排序结果
printf("快速排序结果:\n");
for (i = 0; i < n; i++) {
printf("%s ", keywords[i].word);
}
printf("\n");
// 查找关键字
printf("请输入要查找的关键字:");
scanf("%s", word);
int index = binary_search(keywords, n, word);
if (index == 0) {
printf("未找到该关键字!\n");
} else {
printf("该关键字在序列中的位置为:%d\n", index);
}
return 0;
}
```
以上代码实现了插入排序、快速排序和二分查找算法,可以根据需要选择不同的排序算法进行关键字排序。
阅读全文