2014-10-31 5 views
0

Общий вопрос: Почему Bucket Сортировка выгоднее, чем Quick Sort?Сортировка ковша против быстрой сортировки

Скажем, числа поступают из потока, а мои ведра - как (1,10) (11,20) ect ect.

Затем я сортирую ведра, а затем складываю их вместе со своими отсортированными числами.

ИЛИ

я могу поместить их в массив, а затем отсортировать их с Quicksort

Bucket Сортировка: Bestcase O (N + К) наихудший (N^2); Quicksort: Bestcase O (1) Averagecase O (nlogn) наихудший код (N^2);

Итак, почему мы используем сортировку ковша для таких вещей, как потоки входящих целых чисел, которые мы хотим отсортировать? Это потому, что мы можем принимать решения на основе количества целых чисел в каждом из ваших ковшей?

Благодаря

+0

Лучший случай Quicksort не * O (1), * это [* O (n) *] (http://en.wikipedia.org/wiki/Quicksort). – EJP

+0

Я считаю, что он шутил. – habitats

+2

@ EJP Да, я шутил о http://www.dangermouse.net/esoteric/intelligentdesignsort.html. Я очень плохо шучу. Я должен перестать пытаться их сделать. –

ответ

3

Если мы знаем, K фронт, и она мала (к < < п), то блочная сортировка может эффективно работать быстрее, чем Quicksort, так как п * журнала (п), в среднем по Quicksort, будет больше (n + k), что является средним для сортировки ковша.

т.е.

sortedList = (n*log(n) > n + k) ? bucketSort(list) : quicksort(list); 

Причиной может быть использована для потоков, является то, что блочная сортировка есть на месте. Вы можете поддерживать отсортированный список, эффективно добавляя новые элементы, не переделывая его каждый раз. Вы просто управляете структурой данных (ведро) напрямую, и все.

Quicksort, с другой стороны, не является на месте и требует полного прогона сортировки, чтобы вернуть отсортированный список.

+0

Спасибо тонну! Еще два последующих вопроса, если вы не возражаете. 1. Итак .. Если это большой поток или поток, в котором нам ничего не сказано о размере, может быть полезно использовать Quicksort? 2. Почему иногда O (n + k), я читал пару решений, но он не делает для меня столько смысла, как должно было – k9b

+0

, пожалуйста, примите ответ, если он был удовлетворительным, btw – habitats

+0

Yea soz только что вернулся. Спасибо за ответ – k9b

Смежные вопросы