以下@ Yossarian的建议我扔掉了我的旧回答,并提供这个大大改进的版本。尽管如此,大部分信贷归功于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
的末尾包含的data_array
最大tops
元素的索引。
我仍然怀疑这是一个有效的作为一个精心编写的排序例程,但我已经在数组上测试了它,并且它在合理的时间内运行。
尚未。让我读一下它。 “编辑:”但即使是这样,它看起来不是很琐碎:( – jhaprade