选择排序
逻辑
- 遍历数组, 找到数组中最小的数字, 和最前面一个数字对调
- 第二轮开始,跳过第一个,剩下的继续重复步骤一
第 x 轮 | 外层循环控制变量 | 假设 | 里层循环开始 | 对调 |
---|
1 | 0 | 0 | 1 | [0] 和 [minIndex] |
2 | 1 | 1 | 2 | [1] 和 [minIndex] |
3 | 2 | 2 | 3 | [2] 和 [minIndex] |
代码:
步骤1:
var minIndex = 0
for (var i = 1; i < arr.length; i++) {
if (arr[i] < arr[minIndex]) minIndex = i
}
if (minIndex !== 0) {
var tmp = arr[0]
arr[0] = arr[minIndex]
arr[minIndex] = tmp
tmp = null
}
console.log('排序一次 : ', arr)
步骤2: 重复步骤1
for (var j = 0; j < arr.length - 1; j++) {
var minIndex = j
for (var i = j + 1; i < arr.length; i++) {
if (arr[i] < arr[minIndex]) minIndex = i
}
if (j === minIndex) continue
var tmp = arr[j]
arr[j] = arr[minIndex]
arr[minIndex] = tmp
tmp = null
}
console.log('排序之后 : ', arr)