C语言快速排序算法实现

本程序使用C语言实现快速排序算法,对用户输入的整数序列进行排序,并将排序结果存储在文件output.txt中。程序使用经典的快速排序分区算法,并通过递归调用实现快速排序。

程序代码

#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("数量过多,无效!\n"); return 1; }

SeqList list;

printf("输入 %d 个整数:\n", size);
for (int i = 0; i &lt; size; i++) {
    scanf("%d", &amp;list.data[i]);
}
list.length = size;

printf("原始序列: ");
for (int i = 0; i &lt; list.length; i++) {
    printf("%d ", list.data[i]);
}
printf("\n");

QuickSort(&amp;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 &lt; list.length; i++) {
    fprintf(file, "%d ", list.data[i]);
}
fprintf(file, "\n");

fclose(file);
printf("排序结果已存储在 output.txt 文件中。\n");

return 0;

}

程序说明

程序首先定义了一个结构体SeqList,用于存储整数序列。该结构体包含一个整型数组data和一个整型变量length,分别表示序列的数据和长度。

接下来,定义了一个swap函数,用于交换两个整数的值。

然后,实现了Partition函数,用于确定序列中某个元素的最终位置,并返回该位置。该函数使用的是经典的快速排序分区算法。

接着,实现了QuickSort函数,用于对序列进行快速排序。该函数首先确定序列中某个元素的最终位置,然后递归地对该元素左右两侧的子序列进行排序。

在main函数中,首先读取用户输入的数据数量,并进行合法性检查。然后,依次读取用户输入的整数,存储到SeqList结构体中,并打印原始序列。

接下来,调用QuickSort函数对序列进行排序,并在每次排序后打印排序结果。

最后,将排序结果写入文件output.txt中,并打印提示信息。

总结

整个程序的逻辑比较清晰,使用了递归的快速排序算法,并且在每次排序后都打印了排序结果,方便观察算法的执行过程。同时,还实现了将排序结果存储在文件中的功能,方便后续处理和查看排序结果。


原文地址: https://www.cveoy.top/t/topic/pOhn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录