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;}
