home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 451-475 / apd453 / bubblesort.amos / bubblesort.amosSourceCode
AMOS Source Code  |  1993-01-08  |  1KB  |  69 lines

  1. ' Quicksort. 
  2. ' Robert Farnsworth. 
  3. ' 1 Vidivoc Ave
  4. ' Mildura, 3500
  5. ' Jan. 91. 
  6. ' If you need to sort more than
  7. ' a single dimension array, try
  8. ' this.
  9. ' Times: 
  10. '       Quicksort  Bubble sort 
  11. '   10    0.4         0.4          
  12. '  100    0.8         4.6  
  13. '  500    5.4       117.1
  14. ' 1000   11.7       452.0
  15. ' 2000   26.4          ? 
  16. ' 4000   56.5          ? 
  17. ' 8000  124.8          ? 
  18. ' The times are now lower than above,  
  19. ' now using Swap.
  20. Set Buffer 100
  21. '
  22. Input "Array Size ";A
  23. '
  24. Dim ARRAY1(A),ARRAY2(A)
  25. Global ARRAY1(),ARRAY2()
  26. Print A;" numbers"
  27. For I=1 To A
  28.    ARRAY1(I)=Rnd(2000000) : ARRAY2(I)=ARRAY1(I)
  29. Next 
  30. Print "Sorting..."
  31. Timer=0
  32. BUBBLE[1,A]
  33. E=Timer
  34. Print "Bubble";
  35. Print(E-S)/50.0
  36. Timer=0
  37. QUICKSORT[1,A]
  38. E=Timer
  39. Print "Quick sort";
  40. Print(E-S)/50.0
  41. Boom 
  42. End 
  43. Procedure QUICKSORT[LO,HI]
  44.    If LO<HI
  45.       K=ARRAY2(LO) : L=LO : H=HI
  46.       While L<>H
  47.          While H>L and K<=ARRAY2(H)
  48.             Dec H
  49.          Wend 
  50.          Swap ARRAY2(L),ARRAY2(H)
  51.          While L<H and K=>ARRAY2(L)
  52.             Inc L
  53.          Wend 
  54.          Swap ARRAY2(L),ARRAY2(H)
  55.       Wend 
  56.       QUICKSORT[LO,L-1]
  57.       QUICKSORT[H+1,HI]
  58.    End If 
  59. End Proc
  60. Procedure BUBBLE[LO,HI]
  61.    Shared ARRAY1()
  62.    For J=HI-1 To LO Step -1
  63.       For I=LO To J
  64.          If ARRAY1(I)>ARRAY1(I+1)
  65.             T=ARRAY1(I) : ARRAY1(I)=ARRAY1(I+1) : ARRAY1(I+1)=T
  66.          End If 
  67.       Next 
  68.    Next 
  69. End Proc