+++ /dev/null
-c
-c
-c ###################################################
-c ## COPYRIGHT (C) 1990 by Jay William Ponder ##
-c ## All Rights Reserved ##
-c ###################################################
-c
-c #########################################################
-c ## ##
-c ## subroutine sort -- heapsort of an integer array ##
-c ## ##
-c #########################################################
-c
-c
-c "sort" takes an input list of integers and sorts it
-c into ascending order using the Heapsort algorithm
-c
-c
- subroutine sort (n,list)
- implicit none
- integer i,j,k,n
- integer index,lists
- integer list(*)
-c
-c
-c perform the heapsort of the input list
-c
- k = n/2 + 1
- index = n
- dowhile (n .gt. 1)
- if (k .gt. 1) then
- k = k - 1
- lists = list(k)
- else
- lists = list(index)
- list(index) = list(1)
- index = index - 1
- if (index .le. 1) then
- list(1) = lists
- return
- end if
- end if
- i = k
- j = k + k
- dowhile (j .le. index)
- if (j .lt. index) then
- if (list(j) .lt. list(j+1)) j = j + 1
- end if
- if (lists .lt. list(j)) then
- list(i) = list(j)
- i = j
- j = j + j
- else
- j = index + 1
- end if
- end do
- list(i) = lists
- end do
- return
- end
-c
-c
-c ##############################################################
-c ## ##
-c ## subroutine sort2 -- heapsort of real array with keys ##
-c ## ##
-c ##############################################################
-c
-c
-c "sort2" takes an input list of reals and sorts it
-c into ascending order using the Heapsort algorithm;
-c it also returns a key into the original ordering
-c
-c
- subroutine sort2 (n,list,key)
- implicit none
- integer i,j,k,n
- integer index,keys
- integer key(*)
- real*8 lists
- real*8 list(*)
-c
-c
-c initialize index into the original ordering
-c
- do i = 1, n
- key(i) = i
- end do
-c
-c perform the heapsort of the input list
-c
- k = n/2 + 1
- index = n
- dowhile (n .gt. 1)
- if (k .gt. 1) then
- k = k - 1
- lists = list(k)
- keys = key(k)
- else
- lists = list(index)
- keys = key(index)
- list(index) = list(1)
- key(index) = key(1)
- index = index - 1
- if (index .le. 1) then
- list(1) = lists
- key(1) = keys
- return
- end if
- end if
- i = k
- j = k + k
- dowhile (j .le. index)
- if (j .lt. index) then
- if (list(j) .lt. list(j+1)) j = j + 1
- end if
- if (lists .lt. list(j)) then
- list(i) = list(j)
- key(i) = key(j)
- i = j
- j = j + j
- else
- j = index + 1
- end if
- end do
- list(i) = lists
- key(i) = keys
- end do
- return
- end
-c
-c
-c #################################################################
-c ## ##
-c ## subroutine sort3 -- heapsort of integer array with keys ##
-c ## ##
-c #################################################################
-c
-c
-c "sort3" takes an input list of integers and sorts it
-c into ascending order using the Heapsort algorithm;
-c it also returns a key into the original ordering
-c
-c
- subroutine sort3 (n,list,key)
- implicit none
- integer i,j,k,n
- integer index
- integer lists
- integer keys
- integer list(*)
- integer key(*)
-c
-c
-c initialize index into the original ordering
-c
- do i = 1, n
- key(i) = i
- end do
-c
-c perform the heapsort of the input list
-c
- k = n/2 + 1
- index = n
- dowhile (n .gt. 1)
- if (k .gt. 1) then
- k = k - 1
- lists = list(k)
- keys = key(k)
- else
- lists = list(index)
- keys = key(index)
- list(index) = list(1)
- key(index) = key(1)
- index = index - 1
- if (index .le. 1) then
- list(1) = lists
- key(1) = keys
- return
- end if
- end if
- i = k
- j = k + k
- dowhile (j .le. index)
- if (j .lt. index) then
- if (list(j) .lt. list(j+1)) j = j + 1
- end if
- if (lists .lt. list(j)) then
- list(i) = list(j)
- key(i) = key(j)
- i = j
- j = j + j
- else
- j = index + 1
- end if
- end do
- list(i) = lists
- key(i) = keys
- end do
- return
- end
-c
-c
-c #################################################################
-c ## ##
-c ## subroutine sort4 -- heapsort of integer absolute values ##
-c ## ##
-c #################################################################
-c
-c
-c "sort4" takes an input list of integers and sorts it into
-c ascending absolute value using the Heapsort algorithm
-c
-c
- subroutine sort4 (n,list)
- implicit none
- integer i,j,k,n
- integer index
- integer lists
- integer list(*)
-c
-c
-c perform the heapsort of the input list
-c
- k = n/2 + 1
- index = n
- dowhile (n .gt. 1)
- if (k .gt. 1) then
- k = k - 1
- lists = list(k)
- else
- lists = list(index)
- list(index) = list(1)
- index = index - 1
- if (index .le. 1) then
- list(1) = lists
- return
- end if
- end if
- i = k
- j = k + k
- dowhile (j .le. index)
- if (j .lt. index) then
- if (abs(list(j)) .lt. abs(list(j+1))) j = j + 1
- end if
- if (abs(lists) .lt. abs(list(j))) then
- list(i) = list(j)
- i = j
- j = j + j
- else
- j = index + 1
- end if
- end do
- list(i) = lists
- end do
- return
- end
-c
-c
-c ################################################################
-c ## ##
-c ## subroutine sort5 -- heapsort of integer array modulo m ##
-c ## ##
-c ################################################################
-c
-c
-c "sort5" takes an input list of integers and sorts it
-c into ascending order based on each value modulo "m"
-c
-c
- subroutine sort5 (n,list,m)
- implicit none
- integer i,j,k,m,n
- integer index,smod
- integer jmod,j1mod
- integer lists
- integer list(*)
-c
-c
-c perform the heapsort of the input list
-c
- k = n/2 + 1
- index = n
- dowhile (n .gt. 1)
- if (k .gt. 1) then
- k = k - 1
- lists = list(k)
- else
- lists = list(index)
- list(index) = list(1)
- index = index - 1
- if (index .le. 1) then
- list(1) = lists
- return
- end if
- end if
- i = k
- j = k + k
- dowhile (j .le. index)
- if (j .lt. index) then
- jmod = mod(list(j),m)
- j1mod = mod(list(j+1),m)
- if (jmod .lt. j1mod) then
- j = j + 1
- else if (jmod.eq.j1mod .and. list(j).lt.list(j+1)) then
- j = j + 1
- end if
- end if
- smod = mod(lists,m)
- jmod = mod(list(j),m)
- if (smod .lt. jmod) then
- list(i) = list(j)
- i = j
- j = j + j
- else if (smod.eq.jmod .and. lists.lt.list(j)) then
- list(i) = list(j)
- i = j
- j = j + j
- else
- j = index + 1
- end if
- end do
- list(i) = lists
- end do
- return
- end
-c
-c
-c #############################################################
-c ## ##
-c ## subroutine sort6 -- heapsort of a text string array ##
-c ## ##
-c #############################################################
-c
-c
-c "sort6" takes an input list of character strings and sorts
-c it into alphabetical order using the Heapsort algorithm
-c
-c
- subroutine sort6 (n,list)
- implicit none
- integer i,j,k,n
- integer index
- character*256 lists
- character*(*) list(*)
-c
-c
-c perform the heapsort of the input list
-c
- k = n/2 + 1
- index = n
- dowhile (n .gt. 1)
- if (k .gt. 1) then
- k = k - 1
- lists = list(k)
- else
- lists = list(index)
- list(index) = list(1)
- index = index - 1
- if (index .le. 1) then
- list(1) = lists
- return
- end if
- end if
- i = k
- j = k + k
- dowhile (j .le. index)
- if (j .lt. index) then
- if (list(j) .lt. list(j+1)) j = j + 1
- end if
- if (lists .lt. list(j)) then
- list(i) = list(j)
- i = j
- j = j + j
- else
- j = index + 1
- end if
- end do
- list(i) = lists
- end do
- return
- end
-c
-c
-c ################################################################
-c ## ##
-c ## subroutine sort7 -- heapsort of text strings with keys ##
-c ## ##
-c ################################################################
-c
-c
-c "sort7" takes an input list of character strings and sorts it
-c into alphabetical order using the Heapsort algorithm; it also
-c returns a key into the original ordering
-c
-c
- subroutine sort7 (n,list,key)
- implicit none
- integer i,j,k,n
- integer index
- integer keys
- integer key(*)
- character*256 lists
- character*(*) list(*)
-c
-c
-c initialize index into the original ordering
-c
- do i = 1, n
- key(i) = i
- end do
-c
-c perform the heapsort of the input list
-c
- k = n/2 + 1
- index = n
- dowhile (n .gt. 1)
- if (k .gt. 1) then
- k = k - 1
- lists = list(k)
- keys = key(k)
- else
- lists = list(index)
- keys = key(index)
- list(index) = list(1)
- key(index) = key(1)
- index = index - 1
- if (index .le. 1) then
- list(1) = lists
- key(1) = keys
- return
- end if
- end if
- i = k
- j = k + k
- dowhile (j .le. index)
- if (j .lt. index) then
- if (list(j) .lt. list(j+1)) j = j + 1
- end if
- if (lists .lt. list(j)) then
- list(i) = list(j)
- key(i) = key(j)
- i = j
- j = j + j
- else
- j = index + 1
- end if
- end do
- list(i) = lists
- key(i) = keys
- end do
- return
- end
-c
-c
-c #########################################################
-c ## ##
-c ## subroutine sort8 -- heapsort to unique integers ##
-c ## ##
-c #########################################################
-c
-c
-c "sort8" takes an input list of integers and sorts it into
-c ascending order using the Heapsort algorithm, duplicate
-c values are removed from the final sorted list
-c
-c
- subroutine sort8 (n,list)
- implicit none
- integer i,j,k,n
- integer index
- integer lists
- integer list(*)
-c
-c
-c perform the heapsort of the input list
-c
- k = n/2 + 1
- index = n
- dowhile (n .gt. 1)
- if (k .gt. 1) then
- k = k - 1
- lists = list(k)
- else
- lists = list(index)
- list(index) = list(1)
- index = index - 1
- if (index .le. 1) then
- list(1) = lists
-c
-c remove duplicate values from final list
-c
- j = 1
- do i = 2, n
- if (list(i-1) .ne. list(i)) then
- j = j + 1
- list(j) = list(i)
- end if
- end do
- if (j .lt. n) n = j
- return
- end if
- end if
- i = k
- j = k + k
- dowhile (j .le. index)
- if (j .lt. index) then
- if (list(j) .lt. list(j+1)) j = j + 1
- end if
- if (lists .lt. list(j)) then
- list(i) = list(j)
- i = j
- j = j + j
- else
- j = index + 1
- end if
- end do
- list(i) = lists
- end do
- return
- end
-c
-c
-c #############################################################
-c ## ##
-c ## subroutine sort9 -- heapsort to unique text strings ##
-c ## ##
-c #############################################################
-c
-c
-c "sort9" takes an input list of character strings and sorts
-c it into alphabetical order using the Heapsort algorithm,
-c duplicate values are removed from the final sorted list
-c
-c
- subroutine sort9 (n,list)
- implicit none
- integer i,j,k,n
- integer index
- character*256 lists
- character*(*) list(*)
-c
-c
-c perform the heapsort of the input list
-c
- k = n/2 + 1
- index = n
- dowhile (n .gt. 1)
- if (k .gt. 1) then
- k = k - 1
- lists = list(k)
- else
- lists = list(index)
- list(index) = list(1)
- index = index - 1
- if (index .le. 1) then
- list(1) = lists
-c
-c remove duplicate values from final list
-c
- j = 1
- do i = 2, n
- if (list(i-1) .ne. list(i)) then
- j = j + 1
- list(j) = list(i)
- end if
- end do
- if (j .lt. n) n = j
- return
- end if
- end if
- i = k
- j = k + k
- dowhile (j .le. index)
- if (j .lt. index) then
- if (list(j) .lt. list(j+1)) j = j + 1
- end if
- if (lists .lt. list(j)) then
- list(i) = list(j)
- i = j
- j = j + j
- else
- j = index + 1
- end if
- end do
- list(i) = lists
- end do
- return
- end