1月第1题:如何优化简单的选择排序算法?
选择排序的基本思想:每次循环取出最小(最大)元素作为首元素;
算法实现时,每次确定最小元素时都会通过不断比较并且交换,来保证首位置最小;
不难发现,在确定最小之前的交换都是没有意义的。我们可以设置一个变量 min 来记录最小值的下标,最后在执行交换操作即可。
function selectSort(array) {
let length = array.length;
// 如果不是数组或者数组长度小于等于 1,直接返回,不需要排序
if (!Array.isArray(array) || length <= 1) return;
for (let i = 0; i < length - 1; i++) {
let minIndex = i;
// 设置当前循环最小元素索引
for (let j = i + 1; j < length; j++) {
// 如果当前元素比最小元素索引,则更新最小元素索引
if (array[minIndex] > array[j]) {
minIndex = j;
}
}
// 交换最小元素到当前位置
[array[i], array[minIndex]] = [array[minIndex], array[i]];
}
return array;
}