///Sorts values of `$list` using quick-sort algorithm using `$order`.
///@ignore Documentation: http://sassylists.com/documentation.html#sl-sort
///@requires sl-str-compare
///@requires sl-has-multiple-values
///@requires sl-to-list
///@param {List} $list  - list to sort
///@param {List} $order - order to respect
///@example
///   sl-sort(b a c)
///   //a b c
///@example
///   sl-sort(3 5 1)
///   //1 3 5 
///@return {List}

@function sl-sort($list, $order: "!" "#" "$" "%" "&" "'" "(" ")" "*" "+" "," "-" "." "/" "[" "\\" "]" "^" "_" "{" "|" "}" "~" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z") {
  @if sl-missing-dependencies(sl-str-compare, sl-has-multiple-values, sl-to-list) == true { @return null; }

  $less:  ();
  $equal: ();
  $large: ();

  @if sl-has-multiple-values($list) {
    $seed: nth($list, ceil(length($list) / 2));
    
    @each $item in $list {
      @if $item == $seed {
        $equal: append($equal, $item, list-separator($list));
      }

      @else if sl-str-compare($item, $seed, $order) {
        $less: append($less, $item, list-separator($list));
      }
      
      @else if not sl-str-compare($item, $seed, $order) {
        $large: append($large, $item, list-separator($list));
      }
    }

    @return join(join(sl-sort($less, $order), $equal), sl-sort($large, $order));
  }

  @return sl-to-list($list);
}


///@requires sl-sort
///@alias sl-sort
 
@function sl-order($list) {
  @return sl-sort($list);
}
