home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_BAS / PRO98SRC.ZIP / QUIKSORT.BAS < prev    next >
BASIC Source File  |  1994-01-02  |  2KB  |  69 lines

  1. $IF 0
  2.  
  3.  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  4.  █▀▀ █▀█ ▀█▀ █ █     █▀█ █   █▀█ █▀█ ██▌        Digitek Data Systems
  5.  █▄  █▄▌  █  █▄▌     █ █ █   ▀■▄ █ █ ▌ █    1350 Birchcrest Blvd  Suite G
  6.  █▄▄ █ █ ▄█▄ █ █     █▄█ █▄▄ █▄█ █▄█ █ █      PortSide Charlotte, FL  33952
  7.  ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  8. $ENDIF
  9.  
  10. SUB QUIKSORT(Fi$, Reclen)
  11.         OPTION BINARY BASE 0
  12.         Buffy%=FREEFILE
  13.     OPEN Fi$ FOR BINARY AS #Buffy%
  14.     CALL QuickSort(LOF(Buffy%)\Reclen, Reclen)
  15.     CLOSE #Buffy%
  16.         OPTION BINARY BASE 1
  17. END SUB
  18.  
  19.  
  20. SUB QuickSort(Count&, Reclen)
  21. CALL QuickSort2(0, Count&-1, Reclen)
  22. END SUB
  23.  
  24. SUB QuickSort2(PortSide&, Starboard&, Reclen)
  25.     'locate 6,1: PRINT INT(PortSide/LOF(Buffy%)* 1000);"%"
  26.  
  27.     I&=PortSide&:j&=Starboard&
  28.  
  29.     X$=THINGIE$((PortSide&+Starboard&)\2, Reclen)
  30.  
  31.     DO
  32.         DO WHILE THINGIE$(I&,Reclen)<X$ AND I&<Starboard&:INCR I&:LOOP
  33.         DO WHILE THINGIE$(j&,Reclen)>X$ AND j&>PortSide& :DECR j&:LOOP
  34.  
  35.         IF I&<=j& THEN
  36.             CALL SWAPTHINGIES(I&,j&,Reclen)
  37.             INCR I&: DECR j&:
  38.             END IF
  39.     LOOP WHILE i&<=J&
  40.  
  41.     IF PortSide& < j& THEN CALL QuickSort2(PortSide&, J&, Reclen)
  42.     IF I& < Starboard& THEN CALL QuickSort2(I&, Starboard&, Reclen)
  43. END SUB
  44.  
  45.  
  46.  
  47. FUNCTION THINGIE$(Number&, Reclen)
  48.  
  49.     SEEK #buffy%, Number&*Reclen
  50.     Get$ buffy%, Reclen, I$
  51.     THINGIE$=I$
  52.  
  53. END FUNCTION
  54.  
  55. SUB SWAPTHINGIES(a&,b&, Reclen)
  56.  
  57. Seek #buffy%, a&*Reclen
  58. Get$ buffy%, Reclen, A$
  59. Seek #buffy%, b&*Reclen
  60. Get$ buffy%, Reclen, B$
  61.  
  62. Seek #buffy%, a&*Reclen
  63. PUT$ #buffy%, B$
  64. Seek #buffy%, b&*Reclen
  65. PUT$ #buffy%, A$
  66.  
  67. END SUB
  68.  
  69. OPTION BINARY BASE 1