排序算法之简单选择排序

这里是传送门⇒总结:关于排序算法html



平均时间复杂度 最优时间复杂度 最差时间复杂度 空间复杂度 稳定性
简单选择排序 O(n2) O(n2) O(n2) O(1) 不稳定


  • 算法描述
    • 从未排序区间中选择键值最小的元素,将这个元素放在已经排序好的区间的末尾
    • 重复上述操做,直到待排序列排序完毕
  • JS实现
// 使用公用函数Swap
// 交换array[i]和array[j]
function Swap(array, i, j) {
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

// 此处传入的array会被直接改变
function SelectSort(array) {
    var len = array.length;
    for (var i = 0; i < len - 1; i++) {
        var min = i;
        for (var j = i + 1; j < len; j++) {
            if (array[min] > array[j]) {
                min = j;
            }
        }
        if (min != i) {
            Swap(array, i, min);
        }
    }
}
  • 分析
    • 无论待排序列状况如何,因为要找出最小值,键值比较总要遍历整个未排序区间,因此键值比较的次数老是属于O(n2)的,因此时间复杂度老是O(n2),但其实数据移动的次数会比冒泡排序少不少
    • 该排序属于原地排序,空间复杂度S(n) = O(1)
    • 乍一看以为这个算法是稳定的,但其实只要是“序列倒数第二位和序列倒数第二位以前的某个数同样,且都是这个序列的最大值”这种状况,好比 [2,4,3,4,1],它就不能维持其稳定性,因此简单选择排序是不稳定的
相关文章
相关标签/搜索