选择排序
基本思路
选择排序的大致思路是找到数据中最小的值并将其放置在第一位,接着找到第二小的值放在第二位,以此类推。
具体思路
和冒泡排序一样依然使用双层for循环,外层循环迭代数组并假设本次迭代的第一个值为数组最小值。内层循环时,以外层循环次数开始,让假设的最小值与内层循环迭代到的当前值进行比较,是否比假设值小;如果是,则改变最小值为当前值。当内层循环结束,将得出第n小的值。如果该最小值和原最小值不同,则交换其值。
解法
let array = [55,41,350,2,1];
function selectionSort(array) {
const { length } = array;
console.log(length);
let indexMin;
for (let i = 0; i < length - 1; i++) {
indexMin = i; // 假设索引i的值为最小值
for (let j = i; j < length; j++) {
if (array[indexMin] > array[j]) { // 如果索引为j的值比索引为i的值小,则更换最小值的索引
indexMin = j;
}
if (i !== indexMin) { // 如果最小值不是当前索引为i的值,则交换俩个值
[array[i], array[indexMin]] = [array[indexMin], array[i]];
}
}
}
return array;
}
console.log(selectionSort(array));
复杂度
选择排序和冒泡排序都使用双层for循环,所以选择排序的复杂度也是O(n^2)。