Topk算法(胡思乱想)

 1 $a = array(2,13,800,42,8001,34,56,23,67,365,87665,54,68,3);
 2 
 3 $k = 5;
 4 
 5 $ok = [];
 6 
 7 for($i=$k;$i>0 && count($a)>0;$i--)
 8 {
 9     $len = count($a);
10     $temp = '';
11     $count=0;//统计过掉数
12     foreach ($a as $key => $value) {
13         $temp?"":$temp=$key;
14         if($a[$temp]<$value)
15         {
16             $temp = $key;
17         }
18         //与下限对比直接过
19         if(isset($up_value) && $value>$up_value)
20         {
21             break;
22         }
23 
24         if(++$count>=$len-$i-1)
25         {
26             $up_value = isset($up_value)?min($up_value,$a[$temp]):$a[$temp];
27             break;
28         }
29     }
30     
31     $ok[] = $a[$temp];
32     unset($a[$temp]);
33 }
34 
35 print_r($ok);

猜你喜欢

转载自www.cnblogs.com/xiongchunsheng/p/10876439.html
今日推荐