选择排序

        选择排序算法是一种原址比较排序算法。选择排序大致的思路是找到数据结构中的最小值并将其放置在第一位,接着找到第二小的值并将其放在第二位,以此类推。

        下面是选择排序算法的源代码:

this.selectionSort = function(){

    var length = array.length, indexMin; //{1}

    for (var i=0; i<length-1; i++){ //{2}

        indexMin = i; //{3}

        for (var j=i; j<length; j++){ //{4}

            if(array[indexMin]>array[j]){ //{5}

                indexMin = j; //{6}

            }

        }

        if (i !== indexMin){ //{7}

        swap(i, indexMin);

        }

    }

};

        首先声明一些将在算法内使用的变量(行 {1} )。接着,外循环(行 {2} )迭代数组,并控制迭代轮次(数组的第n个值——下一个最小值)。我们假设本迭代轮次的第一个值为数组最小值(行{3} )。然后,从当前 i 的值开始至数组结束(行 {4} ),我们比较是否位置 j 的值比当前最小值小(行 {5} );如果是,则改变最小值至新最小值(行 {6} )。当内循环结束(行 {4} ),将得出数组第n小的值。最后,如果该最小值和原最小值不同(行 {7} ),则交换其值。

        用以下代码段来测试选择排序算法:

array = createNonSortedArray(5);

console.log(array.toString());

array.selectionSort();

console.log(array.toString());

        下面的示意图展示了选择排序算法,此例基于之前代码中所用的数组。

        数组底部的箭头指示出当前迭代轮寻找最小值的数组范围(内循环 {4} ),示意图中的每一步则表示外循环。

        选择排序同样也是一个复杂度为O(n 2 )的算法。和冒泡排序一样,它包含有嵌套的两个循环,这导致了二次方的复杂度。然而,接下来要学的插入排序比选择排序性能要好。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,761评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,961评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,606评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,652评论 2 9