JavaScript实现排序算法之选择排序

290 阅读1分钟

选择排序实现思路

思路:

从第一个数开始与后面的每个数进行比较,找出最小的(默认是升序),然后交换,以此类推,直到排序结束。

代码实现步骤思路:

  1. 先取出第一个数的下标值为变量 min , 循环遍历数组的长度
  2. 在循环中 用第一个数 分别比较每个数,最后将最小的数的下标值赋值给 min
  3. 将俩个数交换。这样就实现了第一个数为最小值
  4. 最后在整体套个循环,循环上面的思路即可

参考动画:

select.gif

代码实现

class ArrayList {
  array = [];

  // 用于插入数字
  insert(item) {
    this.array.push(item);
  }

  // 交换两个数字
  swap(m, n) {
    let temp = this.array[m];
    this.array[m] = this.array[n];
    this.array[n] = temp;
  }



  // 选择排序
  selectSort() {
    // 外部的循环表示 : 从0的位置开始取出数据,直到倒数第二个数的位置,即 length - 2
    for (let j = 0; j < this.array.length - 1; j++) {
      let min = j;
      // 内部的循环表示:从 min+1位置开始,和后面的数进行比较
      for (let i = min + 1; i < this.array.length; i++) {
        if (this.array[min] > this.array[i]) {
          min = i;
        }
      }
      this.swap(min, j);
    }
  }
  
}

let list = new ArrayList();
list.insert(12);
list.insert(2);
list.insert(45);
list.insert(123);
list.insert(481);
list.insert(56);
console.log(list.array); // [ 12, 2, 45, 123, 481, 56 ]


// 调用选择排序
list.selectSort();
console.log(list.array); // [ 2, 12, 45, 56, 123, 481 ]

选择算法效率

同样和冒泡排序效率差不多

时间复杂度:O(N²)