选择排序实现思路
思路:
从第一个数开始与后面的每个数进行比较,找出最小的(默认是升序),然后交换,以此类推,直到排序结束。
代码实现步骤思路:
- 先取出第一个数的下标值为变量 min , 循环遍历数组的长度
- 在循环中 用第一个数 分别比较每个数,最后将最小的数的下标值赋值给 min
- 将俩个数交换。这样就实现了第一个数为最小值
- 最后在整体套个循环,循环上面的思路即可
参考动画:
代码实现
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²)