cocktail_sort.sf 579 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Sorting_algorithms/Cocktail_sort
  4. #
  5. func cocktailsort(a) {
  6. var swapped = false
  7. func cmpsw(i) {
  8. if (a[i] > a[i+1]) {
  9. a[i, i+1] = a[i+1, i]
  10. swapped = true
  11. }
  12. }
  13. var max = a.end
  14. do {
  15. {|i| cmpsw(i) } << ^max
  16. swapped.not! && break
  17. {|i| cmpsw(max-i) } << 1..max
  18. } while (swapped)
  19. return a
  20. }
  21. var numbers = [7,6,5,9,8,4,3,1,2,0];
  22. say cocktailsort(numbers);
  23.  
  24. var strs = ["John", "Kate", "Zerg", "Alice", "Joe", "Jane"];
  25. say cocktailsort(strs);