排序算法性能如何随数据中的重复元素而变化
How does Sort algorithm performance vary with repeated elements in data
对于相同大小的数组,排序算法(合并、快速)的性能是否会因重复元素而降低。
我可以说吗
var arr = [6,4,7,1,8,3,9,2,10,5]; --> Sorts faster because of unique elements
var arr = [1,1,3,3,3,2,4,4,5,10]; --> Slower because repeated elements
我尝试编写一个简单的快速排序实现,它给了我上述行为。我是不是做错了什么
var Quicksort = function(arr, si, ei) {
if (si >= ei) return;
var pivot = arr[ei];
var pi = si;
for (var i = si; i < ei; i++) {
if (arr[i] < pivot) {
Swap(arr, pi, i);
pi++;
}
}
Swap(arr, pi, ei);
Quicksort(arr, 0, pi - 1);
Quicksort(arr, pi + 1, ei);
return arr;
}
function Swap(arr, i, j) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// Execute
var input = [];
for (var i = 0; i < 1000; i++) {
input.push(Math.floor(Math.random() * 100000));
}
console.log(input);
var result = Quicksort(input, 0, input.length - 1);
console.log(result);
谢谢
相等值或不同值的数量不影响合并或快速排序的效率。
影响快速排序效率的是如何选择枢轴值以及数组是否已经排序。
阅读:http://www.geeksforgeeks.org/when-does-the-worst-case-of-quicksort-occur/
就归并排序而言,影响其效率的是您在归并阶段最终进行了多少次比较。
阅读:When will the worst case of Merge Sort occur?
因此,数字出现的频率不会影响排序算法。
当然,假设您有一个大小为 n 的数组,其中所有值都等于 x,快速排序会表现良好,因为数组已经排序。
如:[6,6,6,6,6],快速排序将在 n² 中执行。
我相信还有其他排序算法可以更好地处理值重复很多的数组,我想说计数排序 (http://www.geeksforgeeks.org/counting-sort/) 将是一个很好的方法。
对于相同大小的数组,排序算法(合并、快速)的性能是否会因重复元素而降低。
我可以说吗
var arr = [6,4,7,1,8,3,9,2,10,5]; --> Sorts faster because of unique elements
var arr = [1,1,3,3,3,2,4,4,5,10]; --> Slower because repeated elements
我尝试编写一个简单的快速排序实现,它给了我上述行为。我是不是做错了什么
var Quicksort = function(arr, si, ei) {
if (si >= ei) return;
var pivot = arr[ei];
var pi = si;
for (var i = si; i < ei; i++) {
if (arr[i] < pivot) {
Swap(arr, pi, i);
pi++;
}
}
Swap(arr, pi, ei);
Quicksort(arr, 0, pi - 1);
Quicksort(arr, pi + 1, ei);
return arr;
}
function Swap(arr, i, j) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// Execute
var input = [];
for (var i = 0; i < 1000; i++) {
input.push(Math.floor(Math.random() * 100000));
}
console.log(input);
var result = Quicksort(input, 0, input.length - 1);
console.log(result);
谢谢
相等值或不同值的数量不影响合并或快速排序的效率。
影响快速排序效率的是如何选择枢轴值以及数组是否已经排序。
阅读:http://www.geeksforgeeks.org/when-does-the-worst-case-of-quicksort-occur/
就归并排序而言,影响其效率的是您在归并阶段最终进行了多少次比较。
阅读:When will the worst case of Merge Sort occur?
因此,数字出现的频率不会影响排序算法。
当然,假设您有一个大小为 n 的数组,其中所有值都等于 x,快速排序会表现良好,因为数组已经排序。
如:[6,6,6,6,6],快速排序将在 n² 中执行。
我相信还有其他排序算法可以更好地处理值重复很多的数组,我想说计数排序 (http://www.geeksforgeeks.org/counting-sort/) 将是一个很好的方法。