排序算法之简单选择排序

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



平均时间复杂度 最优时间复杂度 最差时间复杂度 空间复杂度 稳定性
简单选择排序 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],它就不能维持其稳定性,所以简单选择排序是不稳定的
posted @ 2021-02-23 22:01  有机物与鱼  阅读(40)  评论(0编辑  收藏  举报