原理:
选择排序的方法比较简单,每次循环一次后,相应位置的数据就是已排序好的数据,每次即可确定相应位置的数据。进行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。