将文本文件中的数字插入到k个数字的排序数组中

时间:2017-03-07 02:43:22

标签: c arrays file sorting

我必须创建一个程序,找到文件的k个最大元素,并将它们存储在数组大小为k的位置。它应该读取文件中的每个下一个元素,并仅在它所属的情况下将其插入到已排序的数组中。我无法弄清楚我做错了什么。 我正在从一个包含大约100个数字的文件中读取。该阵列最终打印出996 980 956 932 929,但它正在打印386 915 886 793 996。 这是我的代码:

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

int main(int argc, char *argv[]){
FILE *file;
int i,j, n, temp; 
printf("Enter number of max elements to find:\n");
n = atoi(argv[2]);
int maxnumbers[n];
file = fopen(argv[1], "r");
for(i = 0; i < n; i++)
  fscanf(file, "%d", &maxnumbers[i]); 

for (i=0; i<n-1; i++)
{
  for (j = 0; j< n-1-i; j++)

    if (maxnumbers[j] < maxnumbers[j+1])
    {
    temp = maxnumbers[j];
    maxnumbers[j] = maxnumbers[j+1];
    maxnumbers[j+1] = temp;
    }
}
for (i = 0; i<n; i++)
 printf("%d\n", maxnumbers[i]);

while (!feof(file))
{
temp = maxnumbers[n-1];
j = n-1;
fscanf(file,"%d",&i);
 if (i > temp)
 {
  while(i >=  maxnumbers[j-1])
  {
    maxnumbers[j] = maxnumbers[j-1];
    j = j-1;
  }
 maxnumbers[j] = i;
 }

}
fclose(file);
for (i = 0; i<n; i++)
 printf("%d\n", maxnumbers[i]);
return 0;
}

0 个答案:

没有答案