debugged quicksort algorithm slightly (now able to do multiple identical keys)
This commit is contained in:
parent
f055a7b037
commit
f1653ad88c
|
@ -74,12 +74,12 @@
|
||||||
RECURSIVE SUBROUTINE qsort(a, istart, iend)
|
RECURSIVE SUBROUTINE qsort(a, istart, iend)
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), dimension(*,*) :: a
|
integer(pInt), dimension(:,:) :: a
|
||||||
integer(pInt) :: istart,iend,ipivot
|
integer(pInt) :: istart,iend,ipivot
|
||||||
|
|
||||||
if (istart < iend) then
|
if (istart < iend) then
|
||||||
ipivot = math_partition(a,istart, iend)
|
ipivot = math_partition(a,istart, iend)
|
||||||
call qsort(a, istart, ipivot)
|
call qsort(a, istart, ipivot-1)
|
||||||
call qsort(a, ipivot+1, iend)
|
call qsort(a, ipivot+1, iend)
|
||||||
endif
|
endif
|
||||||
return
|
return
|
||||||
|
@ -92,13 +92,13 @@
|
||||||
integer(pInt) FUNCTION math_partition(a, istart, iend)
|
integer(pInt) FUNCTION math_partition(a, istart, iend)
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), dimension(*,*) :: a
|
integer(pInt), dimension(:,:) :: a
|
||||||
integer(pInt) :: istart,iend,d,i,j,k,x,tmp
|
integer(pInt) :: istart,iend,d,i,j,k,x,tmp
|
||||||
|
|
||||||
d = size(a,1) ! number of linked data
|
d = size(a,1) ! number of linked data
|
||||||
! set the starting and ending points, and the pivot point
|
! set the starting and ending points, and the pivot point
|
||||||
i = istart
|
i = istart
|
||||||
j = iend
|
j = iend
|
||||||
x = a(1,istart)
|
x = a(1,istart)
|
||||||
do
|
do
|
||||||
! find the first element on the right side less than or equal to the pivot point
|
! find the first element on the right side less than or equal to the pivot point
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
a(k,istart) = a(k,j)
|
a(k,istart) = a(k,j)
|
||||||
a(k,j) = tmp
|
a(k,j) = tmp
|
||||||
enddo
|
enddo
|
||||||
partition = j
|
math_partition = j
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
@ -1150,7 +1150,6 @@
|
||||||
character ( len = * ) name
|
character ( len = * ) name
|
||||||
integer(pInt) ndim
|
integer(pInt) ndim
|
||||||
integer(pInt), save :: ndim_save = 0
|
integer(pInt), save :: ndim_save = 0
|
||||||
integer(pInt) prime
|
|
||||||
integer(pInt), save :: seed = 1
|
integer(pInt), save :: seed = 1
|
||||||
integer(pInt) value(*)
|
integer(pInt) value(*)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue