选择排序是思路较简单的基础算法之一,面试问到的频率不高,但是还是有必要了解一下的。
选择排序思路:
1.数组中找到最小的,与首位交换
2.去掉首位,在剩余的数中找到最小的,与第二位交换
3.去掉第1,2位,在剩余的数中找到最小的,与第三位交换
以此类推,直到遍历数组,排序完成
动图演示如下:
个人代码实现如下:
let numbers = [54, 68, 12, 34, 3, 2, 5, 61, 5, 4, 84, 94, 5687];
function selectSort(arr) {
let len = arr.length - 1;
for (let i = 0; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (arr[i] > arr[j]) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
}
return arr;
}
console.log(selectSort(numbers));
优化点:
1.(养成良好习惯)提前取出数组长度,避免每次遍历都要去取长度,且因为倒数第二次遍历结束时就已经排序完成,无需再执行,可以将arr.length换成arr.length-1
2.(养成良好习惯)数值交换尽量使用异或运算,避免作和做差带来的边缘值风险