( . SHELL SORT ON REAL NUMERIC ARRAYS =. (c) Richard Russell 1984, from an idea by Robin Tracy.  sort 300 (exterr=&209 2 pass=0 1 <P%=sort F[OPT pass*2 PLD A,(IX):DEC A:JP NZ,error ZLD A,(IX+1):CP 5:JP NZ,error )dLD L,(IX+2):LD H,(IX+3):LD (start),HL HnDEC HL:LD D,(HL):DEC HL:LD E,(HL):DEC HL:LD A,(HL):DEC A:JP NZ,error x; CLD HL,(start):ADD HL,DE:ADD HL,DE:ADD HL,DE:ADD HL,DE:ADD HL,DE BLD (end),HL:SRL D:RR E:LD HL,&FFFF:EX DE,HL:.rotate SRL D:RR E ; A:SBC HL,DE:ADD HL,DE:JR C,rotate:.loop LD (space),DE GLD H,D:LD L,E:ADD HL,HL:ADD HL,HL:ADD HL,DE:LD (spacer),HL:EX DE,HL ELD IY,(start):PUSH IY:ADD IY,DE:LD (check),IY:POP IX:LD (item),IX ; .newlen EEXX:LD L,(IX):LD H,(IX+1):EXX:LD L,(IX+2):LD H,(IX+3):LD C,(IX+4) EEXX:LD E,(IY):LD D,(IY+1):EXX:LD E,(IY+2):LD D,(IY+3):LD B,(IY+4)  fcp:JR C,ok ; 4.swap PUSH IX:POP HL:PUSH IY:POP DE:LD B,5:.move JLD A,(DE):LD C,A:LD A,(HL):LD (DE),A:LD (HL),C:INC HL:INC DE:DJNZ move @LD DE,(check):PUSH IX:POP HL: A:SBC HL,DE:ADD HL,DE:JR C,ok DPUSH HL:POP IY:LD DE,(spacer):SBC HL,DE:PUSH HL:POP IX:JR newlen ; 3".ok LD HL,(item):LD BC,5:ADD HL,BC:LD (item),HL :,PUSH HL:POP IX:LD DE,(spacer):ADD HL,DE:PUSH HL:POP IY >6LD DE,(end):SBC HL,DE:JR C,newlen:LD DE,(space):SRL D:RR E @LD A,D: E:JP NZ,loop:RET J; @T.fcp LD A,H:XOR D:LD A,H:RLA:RET M:JR NC,fcp0: fcp0:CCF:RET C^.fcp0 LD A,C:CP B:RET NZ:SBC HL,DE:RET NZ:EXX:SBC HL,DE:EXX:RET h; =r.start W 0:.end W 0:.spacer W 0:.check W 0:.item W 0 *|.space W 0:.error LD A,100: exterr:] $P%="Bad sort parameters"+0  pass : . Test program: : @%=20 $ "Filling 1000 real numbers..."  A(999) / I=0 999:A(I)=(0.5-(1))*10^(10-(20)): % I=0 14: A(I);:: " etc..."  "Sorting the numbers..." 9 sort,A(0) : . Call assembly language sort routine. % I=0 14: A(I);:: " etc..."  "Finished." @%=&90A DortB~=šC~šCnf"C+V+^+~=šC*C"C:!:R8SCbk))"C*C"C"Cnf