思想:每一趟从待排序记录中选择最小的,按顺序放在已排好序的序列最后,直到排完为止。
function selectSort(arr){ let k=0; let t=0; for(let i=0;i<arr.length;i++){ //选择出最小的 k=i; for(let j=i+1;j<arr.length;j++){ if(arr[j]<arr[k]){ k=j; //k指向此趟排序最小的 } } if(k!=i){ //交换 t=arr[i]; arr[i]=arr[k]; arr[k]=t; } } return arr; }
时间复杂度
简单选择排序过程中,所需进行记录移动次数较少。最好情况:正序。不移动。最坏情况:逆序。移动3(n-1)次。
无论记录初始序列如何,所需进行的关键词的比较次数相同。都为n^2/2。因此时间复杂度为O(n^2)。
空间复杂度
同冒泡排序一样,只有两个记录交换时需要一个辅助空间。所以空间复杂度为O(1)。
特点
1、以交换记录来实现最小记录到位,是不稳定的。
2、可用于链式结构。
3、移动次数较少,当每记录占用空间较多时,此方法比直接插入排序快。