home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / euphoria / shell.bas < prev    next >
BASIC Source File  |  1994-03-09  |  1KB  |  70 lines

  1. DECLARE SUB sort ()
  2.  
  3. DEFINT A-Z
  4.  
  5. CONST BATCH = 100
  6. CONST BENCHTIME = 15
  7. CONST NITEMS = 50
  8. DIM SHARED xlist(NITEMS), slist(NITEMS)
  9.  
  10. DATA 9, 34, 14, 18, 33, 46, 11, 13, 7, 26, 22, 10, 36, 40, 2, 28, 32, 1
  11. DATA 23, 31, 43, 5, 24, 42, 45, 50, 16, 3, 47, 39, 21, 49, 41, 6, 19, 30
  12. DATA 20, 35, 44, 38, 25, 15, 27, 17, 8, 4, 29, 37, 48, 12
  13.  
  14. FOR i = 1 TO NITEMS
  15.     READ xlist(i)
  16. NEXT i
  17.  
  18. PRINT "shell sort benchmark ..."
  19.  
  20. cycles& = 0
  21. t# = TIMER
  22. WHILE TIMER < t# + BENCHTIME
  23.     FOR b = 1 TO BATCH
  24.         REM must preserve the original array
  25.         FOR x = 1 TO NITEMS
  26.         slist(x) = xlist(x)
  27.         NEXT x
  28.         sort
  29.     NEXT b
  30.     cycles& = cycles& + BATCH
  31. WEND
  32. t# = TIMER - t#
  33. PRINT USING "######.## sorts per second"; cycles& / t#
  34.  
  35. FOR i = 1 TO NITEMS
  36.     PRINT slist(i),
  37. NEXT i
  38.  
  39. SUB sort
  40. REM put slist into ascending order
  41. REM using a shell sort
  42.     
  43.     gap = INT(NITEMS / 4) + 1
  44.     DO
  45.     FOR i = gap + 1 TO NITEMS
  46.         tempi = slist(i)
  47.         j = i - gap
  48.         DO
  49.         tempj = slist(j)
  50.         IF tempi >= tempj THEN
  51.             j = j + gap
  52.             EXIT DO
  53.         END IF
  54.         slist(j + gap) = tempj
  55.         IF j <= gap THEN
  56.             EXIT DO
  57.         END IF
  58.         j = j - gap
  59.         LOOP
  60.         slist(j) = tempi
  61.     NEXT i
  62.     IF gap = 1 THEN
  63.         EXIT SUB
  64.     ELSE
  65.         gap = INT(gap / 4) + 1
  66.     END IF
  67.     LOOP
  68. END SUB
  69.  
  70.