comb_sort.sf 608 B

12345678910111213141516171819202122232425262728
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Sorting_algorithms/Comb_sort
  4. #
  5. func comb_sort(Array arr) {
  6. var gap = arr.len;
  7. var swaps = true;
  8. while (gap > 1 || swaps) {
  9. gap.div!(1.25).int! if (gap > 1);
  10. swaps = false;
  11. range(0, arr.end - gap).each { |i|
  12. if (arr[i] > arr[i+gap]) {
  13. arr[i, i+gap] = arr[i+gap, i];
  14. swaps = true;
  15. }
  16. }
  17. };
  18. return arr;
  19. };
  20. var numbers = [7,6,5,9,8,4,3,1,2,0];
  21. say comb_sort(numbers);
  22.  
  23. var strs = ["John", "Kate", "Zerg", "Alice", "Joe", "Jane"];
  24. say comb_sort(strs);