以顺序存储的顺序表为查找表进行顺序查找,且用冒泡排序法对此线性表排序并打印出来,并且用折半查找法再次查找完整代码c语言
时间: 2024-03-18 10:42:38 浏览: 72
C#数据结构(顺序表,单链表,顺序表应用,冒泡排序,折半查找)
5星 · 资源好评率100%
好的,下面是代码:
```c
#include <stdio.h>
#define MAX_SIZE 50
/* 顺序表结构体 */
typedef struct {
int data[MAX_SIZE];
int length;
} SqList;
/* 顺序查找 */
int SeqSearch(SqList L, int key) {
int i;
for (i = 0; i < L.length; i++) {
if (L.data[i] == key) {
return i;
}
}
return -1;
}
/* 冒泡排序 */
void BubbleSort(SqList *L) {
int i, j, temp;
for (i = 0; i < L->length - 1; i++) {
for (j = 0; j < L->length - i - 1; j++) {
if (L->data[j] > L->data[j + 1]) {
temp = L->data[j];
L->data[j] = L->data[j + 1];
L->data[j + 1] = 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;
}
int main() {
SqList list = {{3, 1, 4, 1, 5, 9, 2, 6, 5, 3}, 10};
int i, index;
printf("原始序列:");
for (i = 0; i < list.length; i++) {
printf("%d ", list.data[i]);
}
BubbleSort(&list);
printf("\n排序后序列:");
for (i = 0; i < list.length; i++) {
printf("%d ", list.data[i]);
}
index = SeqSearch(list, 9);
printf("\n顺序查找:");
if (index != -1) {
printf("找到了,下标为%d", index);
} else {
printf("没有找到");
}
index = BinarySearch(list, 9);
printf("\n折半查找:");
if (index != -1) {
printf("找到了,下标为%d", index);
} else {
printf("没有找到");
}
return 0;
}
```
注意,这里的顺序查找和折半查找都是针对有序表进行查找的。如果是无序表,只能使用顺序查找。
阅读全文