原理:

选择排序的方法比较简单,每次循环一次后,相应位置的数据就是已排序好的数据,每次即可确定相应位置的数据。进行N-1次后,数据有序。具体先是从第一个位置开始,遍历全部数据找出最值,然后记录位置下标,将第一个数据或最后一个数据与之交换。共进行N-1次,达到排序目的。

算法:

int pos;
for(int i = 0;i < Array.length;i++) {
    pos = i;
    for(int j = i + 1;j < Array.length;j++) {
        if(Array[j] < Array[pos])
            pos = j;
    }
    if(pos != i) {
        swap(Array[pos], Array[i]);
    }
}

稳定性:

直接选择排序是不稳定的排序算法,假设数据:4,2,4,1,5。第一次排序后4与1交换位置,变成了1,2,4,4,5。

优缺点:

选择排序简单易行,十分易于实现,但效率不高,不管什么情况都要进行N^2次运算。

复杂度:

最外层循环是N次数据定位,里层是N-1次比较,所以时间复杂度就是o(N^2),空间复杂度是o(1)。

测试:

100000的整型数据,升序排列平均用时6450 ms。

语言:Javascript。

在线测试链接:112.126.74.28/algorithms/index.html