利用顺序表,完成如下操作: 生成一组随机数; 创建一个新的顺序表,实现动态空间分配的初始化,并将数据存储到创建 的顺序表中; 用顺序查找法查询该数组中某个值; 分别用直接插入、冒泡法和简单选择排序对数据进行排序; 利用折半查找法查询排序后的顺序表中的某个数据; 实现以上算法的元素输出。 编写主程序,实现对不同的算法调用。 【基本要求】 1.待排序表的表长不少于100;其中的数据要用伪随机数产生程序产生; 2.对所有算法一定要编写成为 C语言函数,组合成模块化的形式。 3.利用单步跟踪等程序调试技巧仔细研究查找过程。
时间: 2023-12-10 15:41:55 浏览: 89
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE 100 // 数组最大长度
#define RANDOM_RANGE 100 // 随机数范围
typedef struct {
int data[MAX_SIZE]; // 存储数据的数组
int length; // 数组长度
} SqList;
// 初始化顺序表,随机生成数据
void initList(SqList *L) {
srand((unsigned)time(NULL)); // 设置随机数种子
L->length = rand() % MAX_SIZE + 1; // 生成1~MAX_SIZE的随机长度
for(int i=0; i<L->length; i++) {
L->data[i] = rand() % RANDOM_RANGE; // 生成0~RANDOM_RANGE的随机数
}
}
// 顺序查找
int sequentialSearch(SqList L, int key) {
int i;
for(i=0; i<L.length; i++) {
if(L.data[i] == key) {
return i;
}
}
return -1;
}
// 直接插入排序
void insertionSort(SqList *L) {
int i, j;
for(i=1; i<L->length; i++) {
if(L->data[i] < L->data[i-1]) {
int temp = L->data[i];
for(j=i-1; j>=0 && L->data[j]>temp; j--) {
L->data[j+1] = L->data[j];
}
L->data[j+1] = temp;
}
}
}
// 冒泡排序
void bubbleSort(SqList *L) {
int i, j;
for(i=0; i<L->length-1; i++) {
for(j=0; j<L->length-1-i; j++) {
if(L->data[j] > L->data[j+1]) {
int temp = L->data[j];
L->data[j] = L->data[j+1];
L->data[j+1] = temp;
}
}
}
}
// 简单选择排序
void selectionSort(SqList *L) {
int i, j, min;
for(i=0; i<L->length-1; i++) {
min = i;
for(j=i+1; j<L->length; j++) {
if(L->data[j] < L->data[min]) {
min = j;
}
}
if(min != i) {
int temp = L->data[i];
L->data[i] = L->data[min];
L->data[min] = temp;
}
}
}
// 折半查找
int binarySearch(SqList L, int key) {
int low = 0, high = L.length-1, mid;
while(low <= high) {
mid = (low + high) / 2;
if(L.data[mid] == key) {
return mid;
} else if(L.data[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
// 输出顺序表元素
void printList(SqList L) {
for(int i=0; i<L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
SqList L;
initList(&L);
printf("原始数据:");
printList(L);
int key = L.data[rand() % L.length]; // 随机生成要查找的值
int index = sequentialSearch(L, key);
if(index != -1) {
printf("顺序查找:找到 %d,下标为 %d\n", key, index);
} else {
printf("顺序查找:未找到 %d\n", key);
}
insertionSort(&L);
printf("直接插入排序:");
printList(L);
key = L.data[rand() % L.length]; // 随机生成要查找的值
index = binarySearch(L, key);
if(index != -1) {
printf("折半查找:找到 %d,下标为 %d\n", key, index);
} else {
printf("折半查找:未找到 %d\n", key);
}
bubbleSort(&L);
printf("冒泡排序:");
printList(L);
key = L.data[rand() % L.length]; // 随机生成要查找的值
index = binarySearch(L, key);
if(index != -1) {
printf("折半查找:找到 %d,下标为 %d\n", key, index);
} else {
printf("折半查找:未找到 %d\n", key);
}
selectionSort(&L);
printf("简单选择排序:");
printList(L);
key = L.data[rand() % L.length]; // 随机生成要查找的值
index = binarySearch(L, key);
if(index != -1) {
printf("折半查找:找到 %d,下标为 %d\n", key, index);
} else {
printf("折半查找:未找到 %d\n", key);
}
return 0;
}
```
阅读全文