工作原理
- 首先在未排序的序列中初始化,默认最小数值为未排序的序列的起始位置。即外层循环
- 再从除起始位置与已排序元素的剩余未排序元素中继续寻找最小元素,然后交换起始位置的元素与最小元素,这个起始位置就成为了已排序序列的末尾元素。而且根据逻辑后面找到的第二小元素一定比最初找到的最小元素小。即内层循环
- 然后继续外层循环,继续找未排序的序列,直到所有元素排序完毕。
function selectionSort(arr){
let len=arr.length;
let minIndex,temp;
console.time('选择排序耗时');
//外层循环
for(let i=0;i<len-1;i++){
//每次未排序的初始位置
minIndex=i;
//剩余未排序的序列找最小值
for(let j=i+1;j<len;j++){
if(arr[j]<arr[minIndex]){
minIndex=j;
}
}
//交换起始位置与最小原始的位置
temp = arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
console.timeEnd('选择排序耗时');
return arr;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(selectionSort(arr));
-
时间复杂度:/(O(n^2)/)
-
空间复杂度:/(O(1)/)
非稳定算法,因为同等大小的元素的相对位置发生了改变
原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/275072.html