gnome_sort.sf 641 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Sorting_algorithms/Gnome_sort
  4. #
  5. class Array {
  6. method gnomesort {
  7. var (i=1, j=2);
  8. var len = self.len;
  9. while (i < len) {
  10. if (self[i-1] <= self[i]) {
  11. (i, j) = (j, j+1);
  12. }
  13. else {
  14. self[i-1, i] = self[i, i-1];
  15. if (--i == 0) {
  16. (i, j) = (j, j+1);
  17. }
  18. }
  19. }
  20. return self;
  21. }
  22. }
  23.  
  24. var numbers = [7,6,5,9,8,4,3,1,2,0];
  25. say numbers.gnomesort;
  26.  
  27. var strs = ["John", "Kate", "Zerg", "Alice", "Joe", "Jane"];
  28. say strs.gnomesort;