1.递归二分,写烂了,直接粘ChatGPT了
#include <stdio.h>
int binarySearch(int arr[], int low, int high, int target) {
if (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
return binarySearch(arr, mid + 1, high, target);
} else {
return binarySearch(arr, low, mid - 1, target);
}
}
return -1;
}
int main() {
int arr[] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 12;
int result = binarySearch(arr, 0, n - 1, target);
if (result != -1) {
printf("Element found at index %d\n", result);
} else {
printf("Element not found in the array\n");
}
return 0;
}
2.结构体+文件操作+单链表 + 3.正常排序即可
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义教师结构体
typedef struct Teacher {
int empID;
char name[50];
char gender;
int hireYear;
struct Teacher *next;
} Teacher;
// 按入职年份和工号进行排序的函数
Teacher* sortTeachers(Teacher *head) {
if (head == NULL || head->next == NULL) {
return head;
}
Teacher *p, *q, *tail = NULL;
while (head->next != tail) {
p = head;
q = head->next;
while (q->next != tail) {
if (q->hireYear > q->next->hireYear || (q->hireYear == q->next->hireYear && q->empID > q->next->empID)) {
p->next = q->next;
q->next = q->next->next;
p->next->next = q;
q = p->next;
}
p = q;
q = q->next;
}
tail = q;
}
return head;
}
// 释放链表内存
void freeList(Teacher *head) {
Teacher *temp;
while (head != NULL) {
temp = head;
head = head->next;
free(temp);
}
}
int main() {
FILE *file = fopen("input.txt", "r");
if (!file) {
printf("文件打开失败");
exit(1);
}
int n;
fscanf(file, "%d", &n);
Teacher *head = NULL;
Teacher *current;
// 读取教师信息,构建单链表
for (int i = 0; i < n; i++) {
Teacher *teacher = (Teacher *)malloc(sizeof(Teacher));
fscanf(file, "%d %s %c %d", &teacher->empID, teacher->name, &teacher->gender, &teacher->hireYear);
teacher->next = NULL;
if (head == NULL) {
head = teacher;
current = teacher;
} else {
current->next = teacher;
current = teacher;
}
}
fclose(file);
// 对教师信息进行排序
head = sortTeachers(head);
file = fopen("out.txt", "w");
if (!file) {
printf("文件打开失败");
exit(1);
}
current = head;
while (current != NULL) {
fprintf(file, "%d %s %c %d\n", current->empID, current->name, current->gender, current->hireYear);
current = current->next;
}
fclose(file);
// 释放链表内存
freeList(head);
return 0;
}