vlambda博客
学习文章列表

5-18:简述 选择排序 原理

简述

择排序(Selection Sort)与冒泡排序(Bubble Sort)类似,也是对相邻的数进行两两比较。不同之处在于,它不是每比较一次就调换位置,而是一轮比较完毕,找到最大值(或最小值)之后,将其放在正确的位置,其他数的位置不变。

示例

以对数组[3, 2, 4, 5, 1]进行从小到大排序为例,步骤如下:


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