选择排序
我先上一串代码先:
let minIndex, temp // 定义两个空变量 后期赋值使用 默认是undefined
for (let i = 0; i < arr.length - 1; i++) { // 我个人理解为让里面的循环 能循环这个数组的length - 1 次
minIndex = i // 为下面找出最小值做的铺垫也是必不可少的一步
/*
难点在于这i + 1 这个 + 1 的操作就是负责让下次的比较
不用拿已经被选择出来的值来继续进行比较
其次是已经 + 1 了 所以没有必要
*/
for (let j = i + 1; j < arr.length; j++) { // 只是负责找出最小值进行的循环 (很有必要)
if (arr[j] < arr[minIndex]) { // 寻找最小的数
minIndex = j // 将最小数的索引保存
}
}
// 下面是正常的交换值
temp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = temp
}
// 最后return 返回这个排序好了的数组
return arr;
}
// 下面直接打印返回出来的值
console.log(selectionSort([123, 4123, 3421, 45523, 213, 21])) // [ 21, 123, 213, 3421, 4123, 45523 ]
举个例子,一个数组为 56、12、80、91、29,其排序过程如下:
- 第一次遍历时,从下标为 1 的位置即 56 开始,找出关键字值最小的记录 12,同下标为 0 的关键字 56 交换位置。此时数组为 12、56、80、91、20
- 第二次遍历时,从下标为 2 的位置即 56 开始,找出最小值 20,同下标为 2 的关键字 56 互换位置,此时数组为12、20、80、91、56
- 第三次遍历时,从下标为 3 的位置即 80 开始,找出最小值 56,同下标为 3 的关键字 80 互换位置,此时数组为 12、20、56、91、80
- 第四次遍历时,从下标为 4 的位置即 91 开始,找出最小是 80,同下标为 4 的关键字 91 互换位置,此时排序完成,变成有序数组
应用场景:举一个栗子
你在网购的时候总能看见 按照价格排序 吧,然后还有漫画、动漫、电视剧、等一些有 升序降序 的地方都是需要进行排序的,当然 ES6 的新语法中有对数组进行排序的方法,但是你觉得他们的底层不是这些排序?
说也说完了,如果还有不懂的我建议写一个 html, js 写在script里面然后去浏览器里用调试工具来进行复看!