읽을 때와 같은 시간에 정렬하는 것이 가장 좋습니다. 정렬 대신 데이터를 연결된 목록에 저장하는 것이 더 효율적입니다.
fscanf()
을 사용하면 정수에서 정수를 읽을 수 있습니다. 그리고 파일에서 정수를 읽는 순간 정렬을 시도하십시오. 나는 파일에서 정수를 읽을 때 배열을 올바른 위치에 놓으면 읽는 것을 마칠 때 배열을 정렬 할 수 있습니다.
다음 예는 정수로 파일 정수를 읽은 다음 읽기와 동시에 sort를 삽입합니다. 정수는
는
기능이 소요 .... 배열로가 아니라 하나에 의해 파일 하나에서의 int를 읽고 정렬 및 이동에 병합 계속 아래와 같은 기능을 사용할 수 있습니다
void sort_insert(int x, int *array, int len)
{
int i=0, j;
for(i=0; i<(len-1); i++)
{
if (x > array[i])
continue;
for (j=(len-1); j>i; j--)
array[j] = array[j-1];
break;
}
array[i] = x;
}
void main() {
int x, i;
int len = 0;
int array[50];
FILE *fp = fopen("myfile.txt", "r");
while (len<50 && fscanf(fp, " %d",&x)>0)
{
len++;
sort_insert(x, array, len);
}
for (i=0; i<len; i++)
{
printf("array[%d] = %d\n", i, array[i]);
}
}
대소 문자가 +1 –
비교 및 스와핑에 비해 액세스 시간이 훨씬 더 깁니다. 파일에 수백만 개의 정수가 있으므로 한 번에 하나씩 액세스가 느려집니다. – Roronoa
정수가 파일에 쓰여 있습니까 이진 형식이나 ASCII 문자열로? 당신은'sscanf()'를 아마 ASCII라고 언급합니다. ASCII 인 경우 라인 당 하나의 숫자입니까? 정수는 모두 같은 크기 (같은 자리수)입니까? 그렇지 않다면 한 번에 하나씩 읽는 것이 가장 현명합니다. ''은 최악의 비효율 문제를 피하기 위해 I/O를 버퍼링합니다. 아마도 충분히 빠를 것입니다. –