寻找第n大的元素

昨天看到一个题目,“寻找给定数组中第二大的元素”。这个很好考虑:假如第二大的元素是k,那么遍历整个数组大于k的元素数必然为1. 固有以下代码:

 1   for(i =0;i<10;i++)
 2  {
 3       flag = 0;
 4       for(j=0;j<10;j++)
 5     {
 6 
 7       if(arr[i] < arr[j]) 
 8         flag++;
 9       if(flag > 1) 
10         break;
11       if((flag == 1) && (j == 9)) 
12         {
13           printf("%d\n",arr[i]);
14           i=10;//结束外层循环 
15         }
16 
17      }
18 
19   }

忽然想起来以前似乎看到过有问“寻找数组第n大元素的问题”,可以把上面的推广下:

 

 1 int findnbig(int array[],int m,int n)
 2 {
 3    int i,j,flag;
 4      for(i = 0;i < m;i++)
 5    {
 6       flag = 0;
 7       for(j = 0;j < m;j++)
 8     {
 9 
10       if(array[i] < array[j]) 
11         flag++;
12       if(flag > n-1) 
13         break;
14       if((flag == n-1) && (j == m-1)) 
15         return array[i];
16 
17     }
18 
19    }
20 }

回头再写个算法时间空间复杂度分析,我觉得我这种方法应该是比较快的吧。

posted @ 2013-05-04 12:14  Fcp1024  阅读(147)  评论(0)    收藏  举报