zoukankan      html  css  js  c++  java
  • 算法入门---选择排序

    相信大家对冒泡排序都不陌生吧,下面介绍下和冒泡排序有着相同时间复杂度的另一个算法“选择排序”(O(n^2))

    //先定义一个找最小数字的函数
    //函数用一个smallest的中间变量储存最小值,然后逐项比较
    //得出的最小值最后和arr[0]互换数值
    function findSmallest (arr) {
        let smallest = arr[0]
        let smallestIndex = 0
        arr.forEach((item, index) => {
            if(item < smallest) {
                smallest = item
                smallIndex = index
            }
        })
        let temp = arr[0]
        arr[0] = smallest
        arr[smallIndex] = temp
        return smallest
    }
    //循环n次,每次往新数组存入最小值,同时把原数组放在头部的最小值去除以减少findSmallest的对比次数
    function sort(arr) {
        let newArr = []
        let len = arr.length
        for(let i = 0;i < len; i++) {
            newArr.push(findSmallest(arr))
            arr.shift()
        }
        return newArr
    }

    相信有不少童鞋有一个疑问,为什么时间复杂度是O(n^2),明明是n-1、n-2、n-3、......3、2、1的总和既是(n-1)*[(n-1)+1]/2 = (n^2-n)/2

    但是对于大O表示法来说,所有n最高次以外的都是忽略不计的

    时间复杂度不是O((n^2-n)/2),而是O(n^2)

  • 相关阅读:
    oracle对中文的排序
    sql语句分页
    一些简单的PGSQL 操作
    angularJSngSelect
    angular+ionic返回上一页并刷新
    C语言博客作业02循环结构
    c语言第一次作业顺序、分支结构
    C语言博客作业03函数
    C语言博客作业02循环结构
    第零次作业
  • 原文地址:https://www.cnblogs.com/amiezhang/p/8516743.html
Copyright © 2011-2022 走看看