Почему минималистичная быстрая сортировка Haskell не является «настоящей» быстрой сортировкой?

На веб-сайте Haskell представлена ​​очень привлекательная 5-строчная функция быстрой сортировки , как показано ниже.

quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
    where
        lesser = filter (< p) xs
        greater = filter (>= p) xs

Они также включают «Истинную быструю сортировку в C» .

// To sort array a[] of size n: qsort(a,0,n-1)

void qsort(int a[], int lo, int hi) 
{
  int h, l, p, t;

  if (lo < hi) {
    l = lo;
    h = hi;
    p = a[hi];

    do {
      while ((l < h) && (a[l] <= p)) 
          l = l+1;
      while ((h > l) && (a[h] >= p))
          h = h-1;
      if (l < h) {
          t = a[l];
          a[l] = a[h];
          a[h] = t;
      }
    } while (l < h);

    a[hi] = a[l];
    a[l] = p;

    qsort( a, lo, l-1 );
    qsort( a, l+1, hi );
  }
}

Ссылка под версией C указывает на страницу, на которой указано «Быстрая сортировка, указанная во введении, не является« настоящей »быстрой сортировкой и не масштабируется для более длинных списков, как это делает код на языке C.»

Почему вышеуказанная функция Haskell не является настоящей быстрой сортировкой? Как он не масштабируется для более длинных списков?

111
задан Rakete1111 30 July 2017 в 08:37
поделиться