Open 1684838553 opened 1 year ago
解题思路:全数组找出最小值,放在数组索引为0的地方, 此后,找出1 - N-1 中最小值, 放在索引为1的地方, ···
const arr = [1, 3, 8, 6, 3, 56, 9, 0, 44];
function selectSort(arr) {
if (arr.length < 2) return arr;
let n = arr.length;
for (let i = 0; i < n; i++) {
let minValueIndex = i;
for (let j = i + 1; j < n; j++) {
minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;
}
swap(arr, i, minValueIndex);
}
return arr;
}
function swap(arr, i, j) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
解题思路: 索引 0 和 1比较,值大的从后排, 在比较1 和2, 一直到最后一个值, 最后一个值一定会是最大值。在比较 0 - N-1。···
const arr = [1, 3, 8, 6, 3, 56, 9, 0, 44];
function bubbleSort(arr) {
if (arr.length < 2) return arr;
let n = arr.length;
for (let i = n-1; i >= 0; i--) {
for(let j = 1; j <= i ; j++) {
if(arr[j-1] > arr[j]){
swap(arr, j-1, j)
}
}
}
return arr;
}
function swap(arr, i, j) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
解题思路: 0-0, 0-1, 0-2 等地方依次使数组有序
const arr = [1, 3, 8, 6, 3, 56, 9, 0, 44];
function insertSort(arr) {
if (arr.length < 2) return arr;
let n = arr.length;
for (let j = 1; j <= n - 1; j++) {
let newValueIndex = j;
while (newValueIndex - 1 >= 0 && arr[newValueIndex - 1] > arr[newValueIndex]) {
swap(arr, newValueIndex - 1, newValueIndex)
newValueIndex--;
}
}
return arr;
}
function swap(arr, i, j) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
代码优化
function insertSort(arr) {
if (arr.length < 2) return arr;
let n = arr.length;
for (let j = 1; j <= n - 1; j++) {
for (let pre = j - 1; pre >= 0 && arr[pre] > arr[pre + 1]; pre--) {
swap(arr, pre, pre + 1)
}
}
return arr;
}