回 帖 发 新 帖 刷新版面

主题:求助:快速排序问题

运行有问题,我自己看好象有两个问题,第一,是无法做分成前后两部分后的后半部分的排序;第二,是在做前一部分的不断递归

的每部分的后半部分时堆栈益出,请大侠指点一下我的快速排序的子程序问题在哪,非常感谢!

 

program main

real::aa(10)

aa=[39.0,56.0,96.0,87.0,55.0,66.0,78.0,27.0,98.0,18.0]
  call quick_sort(aa,10,1,10)
  write(*,*)aa

end

recursive subroutine quick_sort(a,n,s,e) !a是数组,n是数组大小数,s是数组第一个的位置,e是最后一个的位置
  implicit none
   integer::s 
  integer::e
  integer::l,r      ! l 是左边,r是右边

  real::k
  real::temp
 
  l=s
  r=e
  if(r<=1)return
  k=a(s)
  do while(l<r)
  do while(l<r .and. a(r)>=k)
  r=r-1
  enddo
  temp=a(l)
  a(l)=a(r)
  a(r)=temp
   ! write(*,*)l,r,a(l),a(r),a
   do while(l<r .and. a(l)<k)
     l=l+1
  enddo
       temp=a(r)
    a(r)=a(l)
      a(l)=temp

enddo
write(*,*)l,r,s,e

a(l)=k

  call quick_sort(a,n,s,l-1)
  call quick_sort(a,n,l+1,e)
  return
  end subroutine quick_sort

回复列表 (共1个回复)

沙发

有大侠帮忙看看吗

我来回复

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