对此向量结构的元素施用直接插入排序,输出每一趟排序的结果以及最终排好序的结果;②再使用折半查找排序对此向量结构进行排序输出每一趟排序结果和最后排好序的结果。
时间: 2023-10-31 08:29:49 浏览: 158
希尔排序,直接插入排序,折半插入排序算法.
好的,我来为您实现这两个功能。首先是使用直接插入排序对向量结构进行排序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 自定义结构体类型
typedef struct {
int id; // 关键字字段
char name[20];
int age;
} Student;
// 直接插入排序
void straightInsertSort(Student* arr, int n) {
int i, j;
Student temp;
for (i = 1; i < n; i++) {
temp = arr[i];
for (j = i - 1; j >= 0 && arr[j].id > temp.id; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
// 输出每一趟排序结果
printf("第%d趟排序结果:", i);
for (int k = 0; k < n; k++) {
printf("%d ", arr[k].id);
}
printf("\n");
}
}
int main() {
int n; // 数据元素个数
printf("请输入数据元素个数:");
scanf("%d", &n);
Student* arr = (Student*)malloc(n * sizeof(Student)); // 动态分配数组空间
// 输入数据元素
printf("请依次输入数据元素(id name age):\n");
for (int i = 0; i < n; i++) {
scanf("%d%s%d", &(arr[i].id), arr[i].name, &(arr[i].age));
}
// 输出原始数组元素
printf("原始数组元素如下:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i].id);
}
printf("\n");
straightInsertSort(arr, n); // 直接插入排序
// 输出最终排好序的结果
printf("排序后数组元素如下:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i].id);
}
printf("\n");
free(arr); // 释放数组空间
return 0;
}
```
以上代码实现了使用直接插入排序对向量结构进行排序,并输出每一趟排序结果和最终排好序的结果。其中,直接插入排序算法的实现在`straightInsertSort`函数中。
接下来是使用折半查找排序对向量结构进行排序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 自定义结构体类型
typedef struct {
int id; // 关键字字段
char name[20];
int age;
} Student;
// 折半查找排序
void binaryInsertSort(Student* arr, int n) {
int i, j, low, high, mid;
Student temp;
for (i = 1; i < n; i++) {
temp = arr[i];
low = 0;
high = i - 1;
while (low <= high) {
mid = (low + high) / 2;
if (arr[mid].id > temp.id) {
high = mid - 1;
} else {
low = mid + 1;
}
}
for (j = i - 1; j >= high + 1; j--) {
arr[j + 1] = arr[j];
}
arr[high + 1] = temp;
// 输出每一趟排序结果
printf("第%d趟排序结果:", i);
for (int k = 0; k < n; k++) {
printf("%d ", arr[k].id);
}
printf("\n");
}
}
int main() {
int n; // 数据元素个数
printf("请输入数据元素个数:");
scanf("%d", &n);
Student* arr = (Student*)malloc(n * sizeof(Student)); // 动态分配数组空间
// 输入数据元素
printf("请依次输入数据元素(id name age):\n");
for (int i = 0; i < n; i++) {
scanf("%d%s%d", &(arr[i].id), arr[i].name, &(arr[i].age));
}
// 输出原始数组元素
printf("原始数组元素如下:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i].id);
}
printf("\n");
binaryInsertSort(arr, n); // 折半查找排序
// 输出最终排好序的结果
printf("排序后数组元素如下:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i].id);
}
printf("\n");
free(arr); // 释放数组空间
return 0;
}
```
以上代码实现了使用折半查找排序对向量结构进行排序,并输出每一趟排序结果和最终排好序的结果。其中,折半查找排序算法的实现在`binaryInsertSort`函数中。
阅读全文