JavaScript选择排序

JavaScript选择排序

  • 1 思想
  • 2 代码

1 思想

选择排序思想如下:

  1. 找到数组中最大(最小)的元素;
  2. 将该元素与数组中第一个元素交换位置(如果第一个元素就是最大或者最小的元素那么就和自己交换位置)
  3. 在剩下的元素中找到最大(小)的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。

从上面的过程可以看出,选择排序在不断地选择剩余元素中的最大(小)者。

例如,当前有数组 [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,数据结构,javascript,前端)