规律:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列。
- 选择排序是不稳定的排序算法,
直接选择排序算法,不稳定性,举个简单的例子,就知道它是否稳定…例如:(7) 2 5 9 3 4 [7] 1…当我们利用直接选择排序算法进行排序时候,(7)和1调换,(7)就跑到了[7]的后面了,原来的次序改变了,这样就不稳定了.
- 时间复杂度O(n²)
public static void slectionSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int min = i
for (int j = i + 1, j < arr.length; j++) {
if (arr[min] > arr[j]) {
min = j
}
}
if (min != i) {
// 交换
const tmp = arr[i]
arr[i] = arr[min]
arr[min] = tmp
}
}
}
function swap(arr, a, b){
const tmp = arr[a]
arr[a] = arr[b]
arr[b] = tmp
}
function selectionSort(arr){
const newArr = arr.slice()
const len = newArr.length
for (let i = 0; i< len; i++){
let minIndex = i // 保存最小下标
let minVal = newArr[i]
for(let j = i+1; j newArr[j]) { // 当前小于基准的值时,将最小值设为当前下标,然后继续向后比较,知道最后
minIndex = j
minVal = arr[j]
}
}
// 判断最小值下标是否改变,如果是交换位置
if (i !== min) {
// es6 交换
[newArr[i], newArr[minIndex]] = [newArr[minIndex], newArr[i]]
// swap(newArr, i, min)
}
}
return newArr
}
const newArr = selectionSort([3,5,7,1,2,43,54,1])
console.log(newArr)
动图演示
在线测试



