Jump to content
  • 0

Скорость разных методов сортировки


v01d0s
 Share

Question

Я только начинаю изучать программирование.

Прочитал что сортировка пузырьком является довольно таки медленным методом, гораздо эффективнее "быстрая сортировка".

Решил проверить, просто ради интереса.


<script type="text/javascript">

function bench(f) {
var arr = [2,5,1,4,3,6,8,0,4,32,3,5,7,9,43,2,11];
d = new Date();
for (i = 0; i < 1000; i++) {
f(arr);
}
return new Date() - d;
}

function bench2(f) {
var arr = [2,5,1,4,3,6,8,0,4,32,3,5,7,9,43,2,11];
d = new Date();
for (i = 0; i < 1000; i++) {
f(arr, 0, arr.length - 1);
}
return new Date() - d;
}

function compare(a, {
return a - b;
}

function defaultSort(arr) {
arr.sort(compare);
}

function bubbleSort(arr) {

for (var i = 0; i < arr.length -1; i++ ) {
for (var j = 0; j < arr.length - i - 1; j++ ) {
if (arr[j] > arr[j+1]) {
arr[j] = arr[j] + arr[j+1];
arr[j+1] = arr[j] - arr[j+1];
arr[j] = arr[j] - arr[j+1];
}

}
}

}

function quickSort(arr,min,max) {
var i = min,
j = max,
mid = arr[i];

while ( i <= j) {
while(arr[i] < mid) i++;
while(arr[j] > mid) j--;
if (i <= j) {
c = arr[i];
arr[i] = arr[j];
arr[j] = c;
i++;
j--;
}
}

if (min < j) {quickSort(arr,min,j)}
if (max > i) {quickSort(arr,i,max)}

}

alert(bench2(quickSort));
alert(bench(defaultSort));
alert(bench(bubbleSort));




</script>

Теперь вопрос: почему "сортировка пузырьком" выполняется по скорости примерно одинаково с "быстрой сортировкой"?

Кому не сложно прошу объяснить.

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Прочитал что сортировка пузырьком является довольно таки медленным методом, гораздо эффективнее "быстрая сортировка".

Да, считается. Однако, это не актуально из-за современных мощностей.

Самыми медленными операциями являются умножение, деление, возведение в степень, корень из числа..

Операции сложения, вычитания, присваивания, простые логические операции - самые быстрые.

Edited by Radiocity
Link to comment
Share on other sites

  • 0
Да, считается. Однако, это не актуально из-за современных мощностей.

неужели?)

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

Пузырек я бы использовал максимум до 500 элементов.

Дальше будет ай-яй-яй.

Впрочем, непонятно зачем что-то выдумывать, если в js есть функция sort()

Лирическое отступление.

Одно время интересовался алгоритмами сортировки. Пытался придумать свой. Наверное неделю на это потратил. В результате получилось 2-а алгоритма разных по объему кода. Первый (малый объем кода) назвал его LiteSort (не знаю почему). Результаты тестов не сохранились, но вроде бы он показал результаты лучше, чем любая разновидность пузырька, ShakerSort и т.п. простые алгоритмы. Второй - SortLimpDoubleStep в разы быстрее пузырькой сортировки. На объемах до 10 000 (если мне не изменяет память) мог соперничать с быстрой сортировкой. Впоследстии оказалось, что данный алгоритм очень похож на сортировку Шелла. Знал бы это раньше, мож и не стал бы доделывать)

Кстати, еще существует быстрая сортировка без рекурсии. Насколько помню, массивы по 60 000 (стоки + числа) гоняла за ~ 0,3 сек.

Edited by nerv
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy