/// Comb sort
/// @author Hugo Giraudel
/// @param {List} $list - list to sort
/// @param {List} $order ($default-order) - order to use for sorting
/// @return {List}
/// @require {function} _str-compare
/// @require {function} _swap
@function comb-sort($list, $order: $default-order) {
  $gap: length($list);
  $shrink: 1.3;
  $swapped: false;

  @while $gap != 1 or $swapped != false {
    $gap: floor($gap / $shrink);
    @if $gap < 1 { $gap: 1 }
    $i: 1;
    $swapped: false;

    @while $i + $gap <= length($list) {
      @if not _str-compare(nth($list, $i), nth($list, $i + $gap), $order) {
        $list: _swap($list, $i, $i + $gap);
        $swapped: true;
      }
      $i: $i + 1;
    }

  }

  @return $list;
}
