September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -0,0 +1,35 @@
|
|||
MODULE SORTSEARCH !Genuflect towards Prof. D. Knuth.
|
||||
|
||||
INTERFACE FIND !Binary chop search, not indexed.
|
||||
MODULE PROCEDURE
|
||||
1 FINDI4, !I: of integers.
|
||||
2 FINDF4,FINDF8, !F: of numbers.
|
||||
3 FINDTTI2,FINDTTI4 !T: of texts.
|
||||
END INTERFACE FIND
|
||||
|
||||
CONTAINS
|
||||
INTEGER FUNCTION FINDI4(THIS,NUMB,N) !Binary chopper. Find i such that THIS = NUMB(i)
|
||||
USE ASSISTANCE !Only for the trace stuff.
|
||||
INTENT(IN) THIS,NUMB,N !Imply read-only, but definitely no need for any "copy-back".
|
||||
INTEGER*4 THIS,NUMB(1:*) !Where is THIS in array NUMB(1:N)?
|
||||
INTEGER N !The count. In other versions, it is supplied by the index.
|
||||
INTEGER L,R,P !Fingers.
|
||||
Chop away.
|
||||
L = 0 !Establish outer bounds.
|
||||
R = N + 1 !One before, and one after, the first and last.
|
||||
1 P = (R - L)/2 !Probe point offset. Beware integer overflow with (L + R)/2.
|
||||
IF (P.LE.0) THEN !Aha! Nowhere! And THIS follows NUMB(L).
|
||||
FINDI4 = -L !Having -L rather than 0 (or other code) might be of interest.
|
||||
RETURN !Finished.
|
||||
END IF !So much for exhaustion.
|
||||
P = P + L !Convert from offset to probe point.
|
||||
IF (THIS - NUMB(P)) 3,4,2 !Compare to the probe point.
|
||||
2 L = P !Shift the left bound up: THIS follows NUMB(P).
|
||||
GO TO 1 !Another chop.
|
||||
3 R = P !Shift the right bound down: THIS precedes NUMB(P).
|
||||
GO TO 1 !Try again.
|
||||
Caught it! THIS = NUMB(P)
|
||||
4 FINDI4 = P !So, THIS is found, here!
|
||||
END FUNCTION FINDI4 !On success, THIS = NUMB(FINDI4); no fancy index here...
|
||||
|
||||
END MODULE SORTSEARCH
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
TYPE STUFF
|
||||
INTEGER CODE !A key number.
|
||||
CHARACTER*6 NAME !Associated data.
|
||||
INTEGER THIS !etc.
|
||||
END TYPE STUFF
|
||||
TYPE(STUFF) TABLE(600) !An array of such entries.
|
||||
Loading…
Add table
Add a link
Reference in a new issue