JavaScript选择排序
选择排序的实现思路:从未排序的序列中找到最小的元素,放到已排序的序列末尾,重复上述步骤,直到所有元素排序完毕。
排序流程:
- 假设未排序序列的第一个值是最小值,用
minIndex记录该元素下标,从前往后比较- 若某元素比该元素小,则更新该元素下标到
minIndex- 循环一轮后,如果最小元素下标不为未排序序列第一个元素下标,则进行交换
- 重复上述步骤,直到排序完成
动画演示:
未排序序列:3,44,38,5,47,15,36,26,27,2,46,4,19,50,48
第一趟排序:(2),44,38,5,47,15,36,26,27,(3),46,4,19,50,48
第二趟排序:(2,3),38,5,47,15,36,26,27,(44),46,4,19,50,48
第三趟排序:(2,3,4),5,47,15,36,26,27,44,46,(38),19,50,48
...
第十四趟排序:(2,3,4,5,15,19,26,27,36,38,44,46,47),50,48
最后一趟排序:(2,3,4,5,15,19,26,27,36,38,44,46,47,48,50)
选择排序算法分析:
平均时间复杂度:O(n²)
空间复杂度:O(1),原地排序,辅助空间相对于数据量而言是个常数
稳定性:不稳定 [3,3,1]
算法实现:
function selectSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
let index = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[index] > arr[j]) { //逐个比较
index = j; //保存最小值索引
}
}
if(index !== i) { //如果最小值的下标不与未排序序列第一个数的下标相同,则交换顺序
let temp = arr[i]
arr[i] = arr[index]
arr[index] = temp
}
}
return arr
}
let arr = [11,20,15,7,9,13]
console.log(`选择排序前:${arr}`)
console.log(`选择排序后:${selectSort(arr)}`)