主题:求助:快速排序问题
运行有问题,我自己看好象有两个问题,第一,是无法做分成前后两部分后的后半部分的排序;第二,是在做前一部分的不断递归
的每部分的后半部分时堆栈益出,请大侠指点一下我的快速排序的子程序问题在哪,非常感谢!
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