mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6122 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
		
			
				
	
	
		
			97 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| subroutine sort(n,arr)
 | |
| 
 | |
|   integer n,m,nstack
 | |
|   real arr(n)
 | |
|   parameter (m=7,nstack=50)
 | |
|   integer i,ir,j,jstack,k,l,istack(nstack)
 | |
|   real a,temp
 | |
| 
 | |
|   jstack=0
 | |
|   l=1
 | |
|   ir=n
 | |
|   n0=n
 | |
| 
 | |
| 1 if(ir-l.lt.m) then
 | |
|      do j=l+1,ir
 | |
|         a=arr(j)
 | |
|         do i=j-1,1,-1
 | |
|            if(arr(i).le.a) goto 2
 | |
|            arr(i+1)=arr(i)
 | |
|         enddo
 | |
|         i=0
 | |
| 2       arr(i+1)=a
 | |
|      enddo
 | |
| 
 | |
|      if(jstack.eq.0) return
 | |
| 
 | |
|      ir=istack(jstack)
 | |
|      l=istack(jstack-1)
 | |
|      jstack=jstack-2
 | |
| 
 | |
|   else
 | |
|      k=(l+ir)/2
 | |
|      temp=arr(k)
 | |
|      arr(k)=arr(l+1)
 | |
|      arr(l+1)=temp
 | |
| 
 | |
|      if(arr(l+1).gt.arr(ir)) then
 | |
|         temp=arr(l+1)
 | |
|         arr(l+1)=arr(ir)
 | |
|         arr(ir)=temp
 | |
|      endif
 | |
| 
 | |
|      if(arr(l).gt.arr(ir)) then
 | |
|         temp=arr(l)
 | |
|         arr(l)=arr(ir)
 | |
|         arr(ir)=temp
 | |
|      endif
 | |
| 
 | |
|      if(arr(l+1).gt.arr(l)) then
 | |
|         temp=arr(l+1)
 | |
|         arr(l+1)=arr(l)
 | |
|         arr(l)=temp
 | |
|      endif
 | |
| 
 | |
|      i=l+1
 | |
|      j=ir
 | |
|      a=arr(l)
 | |
| 3    i=i+1
 | |
|      if(i.gt.n0) then
 | |
|         do jj=1,n0
 | |
|            write(99,3001) jj,arr(jj),i,n,ir
 | |
| 3001       format(i10,e12.3,3i10)
 | |
|         enddo
 | |
|         close(99)
 | |
|         stop 'Bounds error in sort.f90'
 | |
|      endif
 | |
|      if(arr(i).lt.a) goto 3
 | |
| 
 | |
| 4    j=j-1
 | |
|      if(arr(j).gt.a) goto 4
 | |
| 
 | |
|      if(j.lt.i) goto 5
 | |
|      temp=arr(i)
 | |
|      arr(i)=arr(j)
 | |
|      arr(j)=temp
 | |
|      goto 3
 | |
| 
 | |
| 5    arr(l)=arr(j)
 | |
|      arr(j)=a
 | |
|      jstack=jstack+2
 | |
|      if(jstack.gt.nstack) stop 'nstack too small in sort'
 | |
| 
 | |
|      if(ir-i+1.ge.j-l) then
 | |
|         istack(jstack)=ir
 | |
|         istack(jstack-1)=i
 | |
|         ir=j-1
 | |
|      else
 | |
|         istack(jstack)=j-1
 | |
|         istack(jstack-1)=l
 | |
|         l=i
 | |
|      endif
 | |
| 
 | |
|   endif
 | |
|   goto 1
 | |
| 
 | |
| end subroutine sort
 |