经典排序算法——选择排序

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

源码:

    this.selectionSort = function() {
        var length = array.length;                  // {1}
        var indexMin;

        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}
![![![](https://upload-images.jianshu.io/upload_images/1666407-90b6f9d4dcc2c846.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](https://upload-images.jianshu.io/upload_images/1666407-afb0f3ec05185385.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                }
            }
            if (i !== indexMin) {                   // {7}
                swap(array, i, indexMin);
            }
        }
    } 

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


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

个人理解:
其实和冒泡排序类似,只不过是从最小值开始查询,依次变大,每一次外循环的内循环轮次结束后都会得出当前查找项范围中的最小值元素的index,最后凭借index交换元素,将当前轮次最小值位置确定下来。

变量i的值也代表了当前已排序好的元素个数。

你可能感兴趣的:(经典排序算法——选择排序)