主题:Fortran 如何随机排列数组(固定其中某些数字)
lluvia
[专家分:0] 发布于 2013-01-27 21:00:00
求教:一个数组sequence=(/1,2,3,4,5,6,7,8,9,10/),可以固定其中某几个数字的位置,例如3和6,让其余位子的数字随机排列吗?
谢谢!
lluvia
回复列表 (共2个回复)
沙发
heizaoniangao [专家分:310] 发布于 2013-01-28 07:08:00
你是发以前帖子那个?
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
板凳
lluvia [专家分:0] 发布于 2013-01-28 10:31:00
嗯,之前那个code有一个地方没有看明白~这个总做不出来想要的结果。
谢谢您!我自己再研究下,不会的还要向您请教。谢谢~
我来回复