JavaScript选择排序
Posted 橘猫吃不胖~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript选择排序相关的知识,希望对你有一定的参考价值。
javascript选择排序
1 思想
选择排序思想如下:
- 找到数组中最大(最小)的元素;
- 将该元素与数组中第一个元素交换位置(如果第一个元素就是最大或者最小的元素那么就和自己交换位置)
- 在剩下的元素中找到最大(小)的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。
从上面的过程可以看出,选择排序在不断地选择剩余元素中的最大(小)者。
例如,当前有数组 [4, 7, 2, 8, 0, 3] 从小到大排序,它的选择排序过程如下:
步骤 | 数组 | 说明 |
---|---|---|
1 | [0, 7, 2, 8, 4, 3] | 数组中0最小,与数组中第一个位置的4交换位置 |
2 | [0, 2, 7, 8, 4, 3] | 剩下(0之后)的数组中,2最小,与第二个位置的7交换位置 |
3 | [0, 2, 3, 8, 4, 7] | 剩下(2之后)的数组中,3最小,与第三个位置的7交换位置 |
4 | [0, 2, 3, 4, 8, 7] | 剩下(3之后)的数组中,4最小,与第四个位置的8交换位置 |
5 | [0, 2, 3, 4, 7, 8] | 剩下(4之后)的数组中,7最小,与第五个位置的8交换位置 |
2 代码
从小到大排序代码如下:
let arr = [4, 7, 2, 8, 0, 3]; // 要排序的数组
// 外层循环,从该位置取数据,剩下最后一个数字无需选择排序,因此-1
for (let i = 0; i < arr.length - 1; i++)
let min = i; // 初始时假设当前最小数据的下标为i,并记录在min中
// 内层循环,找出最小的数字下标
for (let j = min + 1; j < arr.length; j++)
// 如果记录的最小数字大于当前循环到的数组数字
if (arr[min] > arr[j])
min = j; // 将min修改为当前的下标
// 内层循环结束,此时min记录了剩余数组的最小数字的下标
// 将min下标的数字与i位置的数字交换位置
let temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
console.log(arr); // [ 0, 2, 3, 4, 7, 8 ]
从大到小排序只需修改上述代码的第9行,“>”修改为“<”,代码如下:
let arr = [4, 7, 2, 8, 0, 3];
// 外层循环,从该位置取数据,剩下最后一个数字无需选择排序,因此-1
for (let i = 0; i < arr.length - 1; i++)
let min = i; // 初始时假设当前最小数据的下标为i,并记录在min中
// 内层循环,找出最小的数字下标
for (let j = min + 1; j < arr.length; j++)
// 如果记录的最小数字大于当前循环到的数组数字
if (arr[min] < arr[j])
min = j; // 将min修改为当前的下标
// 内层循环结束,此时min记录了剩余数组的最小数字的下标
// 将min下标的数字与i位置的数字交换位置
let temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
console.log(arr); // [ 8, 7, 4, 3, 2, 0 ]
以上是关于JavaScript选择排序的主要内容,如果未能解决你的问题,请参考以下文章