5-18:简述 选择排序 原理
简述
选择排序(Selection Sort)与冒泡排序(Bubble Sort)类似,也是对相邻的数进行两两比较。不同之处在于,它不是每比较一次就调换位置,而是一轮比较完毕,找到最大值(或最小值)之后,将其放在正确的位置,其他数的位置不变。
示例
1、最小值“3”与第二位的“2”进行比较,2小于3,所以新的最小值是第二位的“2”。
2、最小值“2”与第三位的“4”进行比较,2小于4,最小值不变。
3、最小值“2”与第四位的“5”进行比较,2小于5,最小值不变。
4、最小值“2”与第五位的“1”进行比较,1小于2,所以新的最小值是第五位的“1”。
5、第五位的“1”与第一位的“3”互换位置,数组变为[1, 2, 4, 5, 3]。
这一轮比较结束后,最小值“1”已经排到正确的位置了,然后对剩下的[2, 4, 5, 3]重复上面的过程。每一轮排序都会将该轮的最小值排到正确的位置,直至剩下最后一个位置,所有排序结束。
算法实现
先定义一个交换函数:
function swap (myArray, p1, p2) {
const temp = myArray[p1];
myArray[p1] = myArray[p2];
myArray[p2] = temp;
}
然后定义主函数:
function selectionSort (myArray) {
var len = myArray.length,
min;
for (i = 0; i < len; i++) {
// 将当前位置设为最小值
min = i;
// 检查数组其余部分是否更小
for (j = i + 1; j < len; j++) {
if (myArray[j] < myArray[min]) {
min = j;
}
}
// 如果当前位置不是最小值,将其换为最小值
if (i != min) {
swap(myArray, i, min);
}
}
return myArray;
}