找到最接近最大值的 20% 的数组条目

Find 20% of array entries that are closest maximum value

我试图找到最接近最大值的条目的 20%。考虑这个程序

program max_find
    implicit none
    double precision, dimension(10) :: array
    array = [4.0, 7.0, 6.0, 9.0, 3.0, 2.0, 10.0, 5.0, 1.0, 8.0]
    print *, array == maxval(array)
end program

打印 F F F F F F T F F F。现在我想找到逻辑数组 F F F T F F T F F F (10 个条目中的 2 个为真)。我可以将其包装在一个循环中,计算 array > threshold 中的条目数并降低阈值,直到我得到 ratio*size(array) < count(array > threshold)(对于 ratio = 0.2),但如何明智地选择阈值?有没有更好的方法?

调用子例程对数组进行排序(执行此操作的 Fortran 代码位于 public 域中)并使用排序后的数组来选择阈值。您不需要对整个数组进行排序,并且在不太可能的情况下完全排序会花费太长时间,您可以使用 public 域 ORDERPACK 2.0 库中的部分排序子例程。