sorts.cmn 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. # Simple implementation of some sorting algorithms.
  2. N: 100 . # array size
  3. ~array:256 # memory for the array
  4. ~ptr:0 # helper pointers
  5. ~ptr2:0
  6. generateRandom:
  7. $array>ptr
  8. 11 $:ptr # 11 is random seed
  9. N -- @'
  10. $ptr
  11. 5 * 3 + 16 %
  12. $>ptr
  13. $:ptr
  14. --
  15. .
  16. ^
  17. .
  18. printArray:
  19. $array>ptr
  20. N @'
  21. $ptr "A" + ->
  22. $>ptr
  23. --
  24. .
  25. ^
  26. .
  27. sortBubble:
  28. N -- @'
  29. $array>ptr # get to array start
  30. $0 @'
  31. $ptr $>ptr $ptr # load two consecutive
  32. > ?
  33. $ptr $<ptr $ptr # load the two neighbours again
  34. >< # swap them
  35. $:ptr $>ptr $:ptr # write them back
  36. .
  37. --
  38. .
  39. ^
  40. --
  41. .
  42. ^
  43. .
  44. sortInsert:
  45. $array>ptr
  46. N -- @'
  47. $>ptr
  48. $ptr>ptr2
  49. 1 @
  50. $ptr2
  51. $<ptr2
  52. $ptr2
  53. $1 $1 # duplicate the pair
  54. < ?
  55. >< # swap the values and write them back
  56. $:ptr2
  57. $>ptr2
  58. $:ptr2
  59. $<ptr2
  60. ;
  61. ^ ^ # otherwise just pop them
  62. .
  63. $ptr2=array
  64. .
  65. --
  66. .
  67. .
  68. #----------
  69. generateRandom
  70. 0 "original array: " -->
  71. printArray 10 ->
  72. 0 "bubble sort: " -->
  73. generateRandom
  74. sortBubble
  75. printArray 10 ->
  76. 0 "insertion sort: " -->
  77. generateRandom
  78. sortInsert
  79. printArray 10 ->