用C语言1. 先依次输入元素为整型或自定义结构体类型(如订单信息或学生信息或员工信息,但务必有一个数据项为整型作为关键字字段)的数个数据元素建立向量结构(数组),然后①对此向量结构的元素施用直接插入排序,输出每一趟排序的结果以及最终排好序的结果;②再使用折半查找排序对此向量结构进行排序输出每一趟排序结果和最后排好序的结果的完整代码
时间: 2024-03-21 13:41:11 浏览: 20
好的,以下是完整的C语言代码,实现了您所需的功能:
```c
#include <stdio.h>
#include <string.h>
typedef struct {
int id; //关键字字段
char name[20];
int age;
char gender[10];
} Student;
void directInsertionSort(Student arr[], int n) {
for(int i = 1; i < n; i++) {
Student temp = arr[i];
int j = i - 1;
while(j >= 0 && arr[j].id > temp.id) {
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
printf("第%d趟排序结果:\n", i);
for(int k = 0; k < n; k++) {
printf("学号:%d,姓名:%s,年龄:%d,性别:%s\n", arr[k].id, arr[k].name, arr[k].age, arr[k].gender);
}
}
printf("最终排序结果:\n");
for(int i = 0; i < n; i++) {
printf("学号:%d,姓名:%s,年龄:%d,性别:%s\n", arr[i].id, arr[i].name, arr[i].age, arr[i].gender);
}
}
void binaryInsertionSort(Student arr[], int n) {
for(int i = 1; i < n; i++) {
Student temp = arr[i];
int left = 0, right = i - 1;
while(left <= right) {
int mid = (left + right) / 2;
if(arr[mid].id > temp.id) {
right = mid - 1;
} else {
left = mid + 1;
}
}
for(int j = i - 1; j >= left; j--) {
arr[j+1] = arr[j];
}
arr[left] = temp;
printf("第%d趟排序结果:\n", i);
for(int k = 0; k < n; k++) {
printf("学号:%d,姓名:%s,年龄:%d,性别:%s\n", arr[k].id, arr[k].name, arr[k].age, arr[k].gender);
}
}
printf("最终排序结果:\n");
for(int i = 0; i < n; i++) {
printf("学号:%d,姓名:%s,年龄:%d,性别:%s\n", arr[i].id, arr[i].name, arr[i].age, arr[i].gender);
}
}
int main() {
Student students[5];
for(int i = 0; i < 5; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%d", &students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("年龄:");
scanf("%d", &students[i].age);
printf("性别:");
scanf("%s", students[i].gender);
}
printf("直接插入排序:\n");
directInsertionSort(students, 5);
printf("折半查找排序:\n");
binaryInsertionSort(students, 5);
return 0;
}
```
在该代码中,我们首先定义了一个包含id(关键字字段)、姓名、年龄、性别的学生信息结构体类型。然后我们编写了两个排序函数:一个是直接插入排序,另一个是折半查找排序。其中,直接插入排序和折半查找排序都接收一个学生信息数组和数组的长度作为参数,并对数组进行排序。在排序过程中,我们输出了每一趟排序的结果以及最终排好序的结果。
在主函数中,我们先输入了5个学生信息,然后分别对该学生信息数组使用直接插入排序和折半查找排序进行排序,并输出每一趟排序的结果以及最终排好序的结果。
以上就是实现该问题的完整C语言代码。