回 帖 发 新 帖 刷新版面

主题:Fortran 如何随机排列数组(固定其中某些数字)

求教:一个数组sequence=(/1,2,3,4,5,6,7,8,9,10/),可以固定其中某几个数字的位置,例如3和6,让其余位子的数字随机排列吗?

谢谢!

lluvia



回复列表 (共2个回复)

沙发

你是发以前帖子那个?
http://bbs.pfan.cn/post-404401.html
稍微改一下就可以了,用矢量下标vector subscripts定义一下要做排列的元素。

subroutine rand_sort(array, size)
implicit none
integer, intent(in) :: size
real, dimension(size), intent(in out) :: array
real, allocatable :: x(:)
real temp
integer i, j

! generate random array
allocate (x(size))
call random_seed()
call random_number(x)

! sort x and array
do i = 1,size-1
    do j = i+1, size
        if(x(i).GT.x(j)) then
            temp = x(i)
            x(i) = x(j)
            x(j) = temp
            temp = array(i)
            array(i) = array(j)
            array(j) = temp
        end if
    end do
end do
return
end subroutine rand_sort

program test
implicit none
integer i
integer, dimension(8) :: vec = (/(I,I=1,2),4,5,(I,I=7,10)/)
real, dimension(10) :: cc = (/(I,I=1,10)/)
real, dimension(8) :: temp
write(*,"(10F5.1,/)") cc
temp = cc(vec)
call rand_sort(temp,8)
cc(vec) = temp
write(*,"(10F5.1)") cc
pause
stop
end program test

板凳

嗯,之前那个code有一个地方没有看明白~这个总做不出来想要的结果。
谢谢您!我自己再研究下,不会的还要向您请教。谢谢~

我来回复

您尚未登录,请登录后再回复。点此登录或注册