js实现选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,
假设排升序:
第一次将数组中的第一个元素依次和后面的比较, 如果有比它小的, 交换位置, 继续往后走,这样下来, 最小的值一定是第一个;
第二次将数组中的第二个元素依次和后面的比较, 如果有比它小的, 交换位置, 继续往后走,这样下来, 第二小的值一定是第二个;
例如: const arr = [6, 39, 220, 54, 30, 9999, 4, 78, 1, 1000];
- 第一次用 6依次和后面的比,遇到4比它小, 交换位置, 用4继续和78比较, 遇到1比4小, 交换位置, 用1再和1000比较, 第一次结束结果 1,39,220,54,30,9999,6,78,4,1000
- 第二次用 39依次和后面的比,遇到30比它小, 交换位置, 用30继续和9999比较, 遇到6比30小, 交换位置, 用6再和78比较依次类推, 第二次结束结果 1,4,220,54,39,9999,30,78,6,1000
实现代码如下
const arr = [6, 39, 220, 54, 30, 9999, 4, 78, 1, 1000];
function selectionSort(arr) {
for(let i = 0; i< arr.length - 1; i ++) {
for(let j = i+ 1; j< arr.length; j++ ) {
//升序
if(arr[i] > arr[j]) {
[arr[j], arr[i]] = [arr[i], arr[j]]
}
}
console.log(`第${i + 1}次`,arr.join(','));
}
}
selectionSort(arr)
console.log('最终数据', arr);
时间复杂度: 因为是双层for循环, 时间复杂度为 O( n^2 )
空间复杂度:排序的辅助变量空间是一个临时变量,不会随着排序规模的扩大而进行扩大,所以空间复杂度为O(1)