美文网首页
选择排序

选择排序

作者: __越过山丘__ | 来源:发表于2018-12-26 10:55 被阅读0次

    选择排序(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;
    }
    

    相关文章

      网友评论

          本文标题:选择排序

          本文链接:https://www.haomeiwen.com/subject/gzaclqtx.html