按照@Yossarian 的建议,我放弃了我的旧答案并提供了这个经过改进的版本。不过,大部分功劳归功于约塞连。
PROGRAM sort
USE, INTRINSIC :: iso_fortran_env
INTEGER, PARAMETER :: ne = 50
INTEGER, PARAMETER :: tops = 10
REAL(real64), DIMENSION(ne,ne,ne) :: data_array
LOGICAL, DIMENSION(ne,ne,ne) :: mask_array
INTEGER, DIMENSION(tops,SIZE(SHAPE(data_array))) :: top_array
INTEGER :: ix
CALL RANDOM_SEED(put=[1])
CALL RANDOM_NUMBER(data_array)
mask_array = .TRUE.
DO ix = 1, tops
top_array(ix,:) = MAXLOC(data_array,mask=mask_array)
mask_array(top_array(ix,1),top_array(ix,2),top_array(ix,3)) = .FALSE.
END DO
END PROGRAM sort
现在,在程序的末尾top_array
包含 的最大tops
元素的索引data_array
。
我仍然怀疑这是否与编写良好的排序例程一样有效,但我已经在数组上对它进行了测试,直到512^3
元素并且它在合理的时间内运行。