1.输入一组关键字并存储。 2.用不同排序算法对关键字进行排序 3.给一关键字序列,查找给定关键字所在的位序,若不在表中,则返回0。用c语言并演示如何运行
时间: 2024-01-21 15:17:30 浏览: 55
好的,以下是一个简单的实现,包括输入一组关键字、用冒泡排序、选择排序和插入排序对关键字进行排序以及查找给定关键字所在的位序的功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_KEYWORDS 100 // 最大关键字数量
// 输入一组关键字并存储
void input_keywords(char keywords[MAX_KEYWORDS][100], int *size) {
printf("请输入关键字(以空格分隔,最多输入 %d 个):\n", MAX_KEYWORDS);
char input[1000];
fgets(input, sizeof(input), stdin);
int len = strlen(input);
if (input[len - 1] == '\n') {
input[len - 1] = '\0';
len--;
}
char *p = strtok(input, " ");
while (p != NULL && *size < MAX_KEYWORDS) {
strcpy(keywords[*size], p);
(*size)++;
p = strtok(NULL, " ");
}
}
// 冒泡排序
void bubble_sort(char keywords[MAX_KEYWORDS][100], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1 - i; j++) {
if (strcmp(keywords[j], keywords[j + 1]) > 0) {
char temp[100];
strcpy(temp, keywords[j]);
strcpy(keywords[j], keywords[j + 1]);
strcpy(keywords[j + 1], temp);
}
}
}
}
// 选择排序
void selection_sort(char keywords[MAX_KEYWORDS][100], int size) {
for (int i = 0; i < size - 1; i++) {
int min_index = i;
for (int j = i + 1; j < size; j++) {
if (strcmp(keywords[j], keywords[min_index]) < 0) {
min_index = j;
}
}
if (min_index != i) {
char temp[100];
strcpy(temp, keywords[i]);
strcpy(keywords[i], keywords[min_index]);
strcpy(keywords[min_index], temp);
}
}
}
// 插入排序
void insertion_sort(char keywords[MAX_KEYWORDS][100], int size) {
for (int i = 1; i < size; i++) {
char temp[100];
strcpy(temp, keywords[i]);
int j;
for (j = i - 1; j >= 0 && strcmp(keywords[j], temp) > 0; j--) {
strcpy(keywords[j + 1], keywords[j]);
}
strcpy(keywords[j + 1], temp);
}
}
// 查找给定关键字所在的位序,若不在表中,则返回0
int binary_search(char keywords[MAX_KEYWORDS][100], int size, char *keyword) {
int left = 0, right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
int cmp = strcmp(keyword, keywords[mid]);
if (cmp == 0) {
return mid + 1;
} else if (cmp < 0) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return 0;
}
int main() {
char keywords[MAX_KEYWORDS][100];
int size = 0;
input_keywords(keywords, &size);
// 冒泡排序
bubble_sort(keywords, size);
printf("冒泡排序结果:\n");
for (int i = 0; i < size; i++) {
printf("%s ", keywords[i]);
}
printf("\n");
// 选择排序
selection_sort(keywords, size);
printf("选择排序结果:\n");
for (int i = 0; i < size; i++) {
printf("%s ", keywords[i]);
}
printf("\n");
// 插入排序
insertion_sort(keywords, size);
printf("插入排序结果:\n");
for (int i = 0; i < size; i++) {
printf("%s ", keywords[i]);
}
printf("\n");
// 查找关键字
printf("请输入要查找的关键字:\n");
char keyword[100];
scanf("%s", keyword);
int index = binary_search(keywords, size, keyword);
if (index > 0) {
printf("%s 在表中的位置是:%d\n", keyword, index);
} else {
printf("%s 不在表中\n", keyword);
}
return 0;
}
```
运行程序后,可以按照提示输入关键字,程序会对其进行排序并输出排序结果。然后,程序会提示输入要查找的关键字,查找结果会在屏幕上显示出来。
阅读全文