选择排序(Selection Sort
)与冒泡排序类似,也是依次对相邻的数进行两两比较。不同之处在于,它不是每比较一次就调换位置,而是一轮比较完毕,找到最大值(或最小值)之后,将其放在正确的位置,其他数的位置不变。
以对数组[3, 2, 4, 5, 1] 进行从小到大排序为例,步骤如下:
- 假定第一位的“3”是最小值。
- 最小值“3”与第二位的“2”进行比较,2小于3,所以新的最小值是第二位的“2”。
- 最小值“2”与第三位的“4”进行比较,2小于4,最小值不变。
- 最小值“2”与第四位的“5”进行比较,2小于5,最小值不变。
- 最小值“2”与第五位的“1”进行比较,1小于2,所以新的最小值是第五位的“1”。
- 第五位的“1”与第一位的“3”互换位置,数组变为[1, 2, 4, 5, 3]。
这一轮比较结束后,最小值“1”已经排到正确的位置了,然后对剩下的 [2, 4, 5, 3] 重复上面的过程。每一轮排序都会将该轮的最小值排到正确的位置,直至剩下最后一个位置,所有排序结束。
代码:
function swap(myArray, p1, p2){
var 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;
}
网友评论