原理:在每次循环遍历中找到最小的数字放到相应的位置,第一次找所有数中最小的数,放在第一个位置,第二次找剩下的数中最小的数放在第二个位置,以此类推,直到遍历完所有的数.
图解:
JS版本实现:
'use strict';
function selectionSort(array){
if(!(array instanceof Array)){
return 'need Array!';
}
for(let i=0;i<array.length;i++){
// 每次设定起始最小下标为i,每个i为每次循环结果后确定的位置下标
let minIndex=i;
// 每次mindex的值和未确定位置的剩下所有数比较,找到最小的那个数的下标
for(let j=i;j<array.length;j++){
if(array[minIndex]>array[j]){
minIndex=j;
}
}
// 如果需要调换,则调换,确保稳定
if(array[i]!==array[minIndex]){
swap(i,minIndex,array);
}
}
return array;
}
function swap(index1,index2,array){
const tmp=array[index2];
array[index2]=array[index1];
array[index1]=tmp;
}
function test(){
const array=[5,4,3,2,3,3,1,8,4,7,9,6];
const res=selectionSort(array);
console.log(res);
}
test();