zoukankan      html  css  js  c++  java
  • 排序算法——选择排序

    写在前面

    除了冒泡排序外的第二简单的排序算法就是选择排序了。选择排序的思路就是每次从前往后或从后往前依次确定一个数的位置,确定的方法就是将那个位置的数单独拎出来和其余未确定位置的数据依次进行比较和交换,来最终确定该位置的数。比如,第一趟从中选择出一个最小的数,将其放在第一个位置,第二趟从剩余的数中再次选择出一个最小的数据,放在第二的位置,以此类推。

    选择排序也是比较 n-1 趟

    1. 选择排序

    选择排序只是一个思路,具体实现方式有很多,比如下方的每次记录最小数的下标,一趟比较完后才交换位置。

    function sort(arr){
        for(let i = 0; i < arr.length-1; i++){
            let min = i
            for(let j = i+1; j < arr.length; j++){
                if(arr[j] < arr[min]){
                    min = j
                }
            }
            let temp = arr[i]
            arr[i] = arr[min]
            arr[min] = temp
        }
        return arr
    }
    

    平均时间复杂度:O(n^2), 最好时间复杂度:O(n),最差时间复杂度:O(n^2)
    空间复杂度:O(1)
    稳定性:不稳定

    也可以在比较的过程中直接交换,这种在比较过程中就直接交换的类似于冒泡排序,是稳定的。

    function sort2(arr){
        for(let i = 0; i < arr.length-1; i++){
            let min = arr[i]   /*其实可以不用要这个 min 临时变量,直接把 arr[i] 当作 min 就可以*/
            for(let j = i+1; j < arr.length; j++){
                if(arr[j] < min){
                    let temp = arr[j]
                    arr[j] = min
                    min = temp
                }
            }
            arr[i] = min
        }
        return arr
    }
    

    平均时间复杂度:O(n^2), 最好时间复杂度:O(n),最差时间复杂度:O(n^2)
    空间复杂度:O(1)
    稳定性:稳定

  • 相关阅读:
    sqlserver-一次updlock和withnolock和with check option 的报错原因分析
    类库文件引用web服务报错解决方法-在 ServiceModel 客户端配置部分中,找不到引用协定的默认终结点元素
    用timer自定义计划任务时间
    console 程序随系统启动及隐藏当前程序窗口
    爱积多合作农场正式上线试运营
    CSS-三列布局
    CSS-垂直居中
    form表单重置
    CSS3 选择器
    Tab选项卡
  • 原文地址:https://www.cnblogs.com/lovevin/p/13600039.html
Copyright © 2011-2022 走看看