这更像是一个学术/家庭作业问题?
更改
会更好吗?if (index_outer !== index_min) {
$P.swap(arr, index_outer, index_min);
}
到
$P.swap(arr, index_outer, index_min);
并且始终交换,因为这是index_outer
确实具有最小值的特殊情况?这将是一个什么都不做的交换,但同时它不会破坏任何东西。因为我认为这种情况不常发生,这会减少使用if
支票的次数。
$P.swap = function (arr, i, j) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
};
$P.selectionSort = function (arr) {
var index_outer,
index_inner,
index_min,
length = arr.length;
for (index_outer = 0; index_outer < length; index_outer++) {
index_min = index_outer;
for (index_inner = index_outer + 1; index_inner < length; index_inner++) {
if (arr[index_inner] < arr[index_min]) {
index_min = index_inner;
}
}
if (index_outer !== index_min) {
$P.swap(arr, index_outer, index_min);
}
}
return arr;
};
答案 0 :(得分:2)
我认为这不总是一个好主意。如果数组被部分/完全排序,那么你将浪费对$ P.swap()的调用。
对于改进选择排序,尝试通过 index_min 和 index_max 同时从两端排序数组。虽然比较次数保持不变,但通过次数会减少,从而减少总运行时间。