基本原理
选择排序是最为简单的排序算法,非常容易理解,不信往下看。
以升序排列(就是从小排到大)来说,选择排序先选出最小的数字,放在最前面,然后选出第二小的数字,排在第二位,依次类推。遍历完整个数组之后,排序也就排好了。
例子
举个例子,假如有一个乱序数组:
[2, 6, 1, 0]
下面我们将这个数组交给选择排序。
第一轮:
-
锁定第一个数字 2,依次往后看有没有数字比它小。
[2, 6, 1, 0]
-
发现 1 比它小:
[2, 6, 1, 0]
-
交换他们的位置,将小的放到前面:
[1, 6, 2, 0]
-
从 2 的位置按接着往后看,查找有没有数字比第一个数字 1 还小。
-
发现 0 比它小。
[1, 6, 2, 0]
-
交换他们的位置,将小的放到前面:
[0, 6, 2, 1]
-
到达数组末尾,第一轮排序结束。
第二轮:
-
锁定第二个数字 6,依次往后看有没有数字比它小。
[0, 6, 2, 1]
-
参考第一轮
第三轮:
- 参考第二轮
第四轮:
- 参考第三轮
代码
我最喜欢的上代码环节:
/**
* 指定数组,交换数组中两个元素的位置
* @param {Array} list 数组
* @param {Number} i 元素 1 的索引
* @param {Number} j 元素 2 的索引
*/
const swap = (list, i, j) => {
let temp = list[i]
list[i] = list[j]
list[j] = temp
}
// 选择排序
const selectSort = (list) => {
const len = list.length
for (let i = 0; i < len - 1; i++) {
for (let j = i + 1; j < len; j++) {
if (list[j] < list[i]) {
swap(list, i, j)
}
}
}
return list
}
总结
选择排序,选出数组中最小的数字,放在第一位;然后选出剩下的数字中最小的,放在第二位,依次类推。知识点啊,不知道考不考。
网友评论