使用C++,写一段代码要求能够读取包含了大量数据txt文件,并对里面的数据进行堆排序
时间: 2024-05-09 14:16:59 浏览: 14
好的,以下是使用C语言写的读取包含大量数据的txt文件并进行堆排序的代码:
```
#include<stdio.h>
#include<stdlib.h>
// 堆排序函数
void heapSort(int arr[], int n){
// 建立最大堆
for(int i = n / 2 - 1; i >= 0; i--){
heapify(arr, n, i);
}
// 堆排序
for(int i = n - 1; i >= 0; i--){
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
heapify(arr, i, 0);
}
}
// 堆化函数
void heapify(int arr[], int n, int i){
int largest = i; // 初始化最大值为父节点
int left = 2 * i + 1;
int right = 2 * i + 2;
// 如果左节点大于父节点,将最大值设为左节点
if(left < n && arr[left] > arr[largest]){
largest = left;
}
// 如果右节点大于父节点,将最大值设为右节点
if(right < n && arr[right] > arr[largest]){
largest = right;
}
// 如果最大值不为父节点,进行交换并递归堆化
if(largest != i){
int temp = arr[i];
arr[i] = arr[largest];
arr[largest] = temp;
heapify(arr, n, largest);
}
}
int main(){
FILE *fp;
char filename[100];
int arr[1000];
int i = 0;
printf("请输入要读取的txt文件名:");
scanf("%s", filename);
fp = fopen(filename, "r");
if(fp == NULL){
printf("打开文件失败!\n");
exit(0);
}
// 读取文件内容到数组
while(fscanf(fp, "%d", &arr[i]) == 1){
i++;
}
fclose(fp);
int n = i; // 数组大小为读取的元素个数
// 调用堆排序函数对数组排序
heapSort(arr, n);
// 输出排序后的结果
printf("排序后的结果为:");
for(int i = 0; i < n; i++){
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
希望这个代码能够帮到您,如有其他问题请随时提出。