从K个数里边找出最大的N个数,圣诞快乐

从K个数里面找出最大的N个数,圣诞快乐!
我要从大约20个数里面找出最大的3个数,所以我自己改写了一份code。我手动输入10个数字,然后希望输出3个最大的数字,但是结果只有最大的数字是正确的,第二个和第三个都是不对的,不知道哪个环节出了问题,很是纳闷,欢迎大家的建议。 圣诞节快乐


#include <stdio.h>
#define N 3

int main()
{
        int i,j;
        int area; 
        int maxArea[N]; 
        int empty = N;

     for(j=0;j<10;j=j+1)
     {    
         printf("Input:");
          scanf("%d",&area);
          printf("\n");

         if(empty > 0)
         {
           maxArea[N-empty]=area;

           empty=empty-1;
         }
         else
         {
           for(i=0; i < N; i=i+1)
           {
             if(area>maxArea[i])
             {
               maxArea[i]=area;

               break;
             }
           }
         }
       }
       printf("Area1=%d\n",maxArea[0]);
       printf("Area2=%d\n",maxArea[1]);
       printf("Area3=%d\n",maxArea[2]);
}

------解决方案--------------------
搜 最大堆...
------解决方案--------------------
1、声明一个20个元素的数组;
2、每输入一个数后,将这个数插入到数组中;
3、最后输出前3个元素即可。
其中第1和2步实际上是很自然的完成插入排序的过程。

引用:
我要从大约20个数里面找出最大的3个数,所以我自己改写了一份code。我手动输入10个数字,然后希望输出3个最大的数字,但是结果只有最大的数字是正确的,第二个和第三个都是不对的,不知道哪个环节出了问题,很是纳闷,欢迎大家的建议。 圣诞节快乐


#include <stdio.h>
#define N 3

int main()
{
        int i,j;
        int area; 
        int maxArea[N]; 
        int empty = N;

     for(j=0;j<10;j=j+1)
     {    
         printf("Input:");
          scanf("%d",&area);
          printf("\n");

         if(empty > 0)
         {
           maxArea[N-empty]=area;

           empty=empty-1;
         }
         else
         {
           for(i=0; i < N; i=i+1)
           {
             if(area>maxArea[i])
             {
               maxArea[i]=area;

               break;
             }
           }
         }
       }