C语言实现快速排序算法并写入文件 - 代码示例与分析
#include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100
typedef struct { int data[MAX_SIZE]; int length; } SeqList;
void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }
int Partition(SeqList *list, int low, int high) { int pivot=list->data[low]; while (low < high) { while (low < high && list->data[high] >= pivot) high--; swap(&list->data[low], &list->data[high]); while (low < high && list->data[low] <= pivot) low++; swap(&list->data[low], &list->data[high]); } return low; }
void QuickSort(SeqList *list, int low, int high) { if (low < high) { int pivotPos = Partition(list, low, high); printf(" "); for (int i = 0; i < list->length; i++) { printf("%d ", list->data[i]); } printf("\n"); QuickSort(list, low, pivotPos - 1); QuickSort(list, pivotPos + 1, high); } }
int main() { int size; printf("请输入数据数量: "); scanf("%d", &size); if (size <= 0 || size > MAX_SIZE) { printf("数量过多,无效! "); return 1; }
SeqList list;
printf("输入 %d 个整数:\n", size);
for (int i = 0; i < size; i++) {
scanf("%d", &list.data[i]);
}
list.length = size;
printf("原始序列: ");
for (int i = 0; i < list.length; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
QuickSort(&list, 0, list.length - 1);
FILE* file = fopen("output.txt", "w");
if (file == NULL) {
printf("无法打开文件!\n");
return 1;
}
fprintf(file, "排序结果: ");
for (int i = 0; i < list.length; i++) {
fprintf(file, "%d ", list->data[i]);
}
fprintf(file, "\n");
fclose(file);
printf("排序结果已存储在 output.txt 文件中。\n");
return 0;
}这段代码实现了快速排序算法,对输入的一组整数进行排序,并将排序结果存储在output.txt文件中。
具体实现步骤如下:
- 定义了一个结构体SeqList,其中包含一个整型数组data和一个整型变量length,用于存储待排序的数据和数据的数量。
- 实现了一个swap函数,用于交换两个整数的值。
- 实现了一个Partition函数,用于将数组划分为两部分,并返回划分后基准元素的位置。
- 实现了一个QuickSort函数,用于对数组进行快速排序。在该函数中,首先将数组划分为两部分,然后递归地对划分后的两部分进行快速排序。
- 在main函数中,首先读取输入的数据数量,并进行有效性检查。然后,读取输入的整数,并将其存储在SeqList结构体中。
- 打印原始序列,并调用QuickSort函数对序列进行排序。在排序过程中,每次交换元素后,打印一次排序后的序列。
- 打开output.txt文件,将排序结果写入该文件中。
- 关闭文件并输出提示信息。
整体来说,这段代码是通过递归实现快速排序算法,具有一定的可读性和可维护性。然而,代码中可能存在一些潜在的问题,如输入数据的有效性检查不够严格、文件打开失败的错误处理等,可以进行进一步的改进。
原文地址: https://www.cveoy.top/t/topic/pOgg 著作权归作者所有。请勿转载和采集!