折半插入排序从键盘输入记录数,依次输入各记录元素数据项的值,并以这些数值为记录的关键字对记录进行排序。最后在屏幕上输出排序后的记录。
时间: 2024-04-30 08:20:03 浏览: 79
数据结构 折半插入排序
好的,这里是折半插入排序的代码实现,你可以参考下:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int key;
// 其他数据项
} RecordType;
RecordType R[MAX_SIZE];
void BInsertSort(int n);
int main() {
int n;
printf("请输入记录数:");
scanf("%d", &n);
printf("请输入每个记录的关键字:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &R[i].key);
}
BInsertSort(n);
printf("排序后的结果为:\n");
for (int i = 0; i < n; i++) {
printf("%d ", R[i].key);
}
printf("\n");
return 0;
}
void BInsertSort(int n) {
int i, j, low, high, mid;
RecordType tmp;
for (i = 1; i < n; i++) {
tmp = R[i];
low = 0;
high = i - 1;
while (low <= high) {
mid = (low + high) / 2;
if (R[mid].key > tmp.key) {
high = mid - 1;
} else {
low = mid + 1;
}
}
for (j = i - 1; j >= high + 1; j--) {
R[j + 1] = R[j];
}
R[high + 1] = tmp;
}
}
```
代码中,我们使用结构体 `RecordType` 表示每个记录,其中 `key` 表示记录的关键字。我们通过 `BInsertSort` 函数实现折半插入排序。具体实现如下:
1. 对于第 `i` 个记录 `R[i]`,我们先将它存储到一个临时变量 `tmp` 中。
2. 然后在已排好序的前 `i-1` 个记录中,使用折半查找算法找到插入位置。
3. 将所有大于 `tmp` 的记录后移一位,然后将 `tmp` 插入到正确的位置。
最后,我们在主函数中读入记录数和每个记录的关键字,然后调用 `BInsertSort` 函数进行排序,并输出排序后的结果。
阅读全文