gpt4 book ai didi

c - 在 C 中对文件中的数字进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:42 24 4
gpt4 key购买 nike

我想在不使用数组的情况下通过快速排序对文件编号进行排序。但是,我不知道如何用另一个替换特定位置的数字。我从制作这段代码开始:

int main()
{

FILE* F1=fopen("file.txt","r+");
int var1, var2, min;

while(fscanf(F1, "%d", &var1) ==1){
min = var1;
long pos1 = ftell(F1);
fseek(F1, 0, SEEK_SET);
while(fscanf(F1, "%d", &var2) ==1){
if(min > var2)
{
//Replace the var2 by min in the file

}

}
fseek(F1, pos1, SEEK_SET);
}

请问,这可能吗?

最佳答案

不使用数组就没有合理的方法。这是我会做的:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifndef ENOENT
#define ENOENT 2
#endif

static int comp(const void *a, const void *b)
{
const int va = *(const int *)a;
const int vb = *(const int *)b;

return va > vb ? 1 : va == vb ? 0 : -1;
}

int main(int argc, char **argv)
{
enum {PAGE_SIZE = 4096, INTS_PER_PAGE = PAGE_SIZE / sizeof(int)};

int *arr = (int *)malloc(PAGE_SIZE);
int *beg = arr;
int *end = arr;
size_t arr_size = 0;
size_t max_arr_size = INTS_PER_PAGE;
FILE *f;

if (arr == NULL) {
perror("malloc(3)");
return errno;
}

if (argc < 2) {
fprintf(stderr, "%s\nusage: kwiksort input_file\n",
strerror(ENOENT));
return ENOENT;
}

f = fopen(argv[1], "r+");

if (f == NULL) {
perror("fopen(3)");
return errno;
}

loop:
for (; arr_size < max_arr_size; ++arr_size, ++end)
if (fscanf(f, "%d", end) == EOF)
goto sort;

max_arr_size += INTS_PER_PAGE;
arr = (int *)realloc(arr, max_arr_size * sizeof(int));

if (arr == NULL) {
perror("realloc(3)");
return errno;
}

beg = arr;
end = arr + arr_size;

goto loop;

sort:
qsort(arr, arr_size, sizeof(int), comp);

rewind(f);

while (beg < end)
fprintf(f, "%d\n", *beg++);

fclose(f);
free(arr);

return 0;
}

关于c - 在 C 中对文件中的数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43709929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com