码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 排序算法—插入排序快速排序


    排序算法的分类

    在这里插入图片描述

    什么是线性时间 or 非线性时间

    摘自维基百科解释

    在计算复杂性理论,一个被称为线性时间或 Ο(n)时间的算法,表示此算法解题所需时间与输入资料的大小成正比,通常以n表示。换句话说,执行时间与输入资料大小为线性比例。例如将一列数字加总的所需时间,正比于串列的长度。

    各大排序算法时间、空间复杂度图表:
    各大算法时间空间复杂度图表

    插入排序

    插入排序,意为将待排序的元素插入已经排序好的数列中。假设前面 n-1(其中 n>=2)个数已经是排好顺序的,现将第 n 个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序。

    在这里插入图片描述

    /**
     * @description: 插入排序
     * @param {Array}
     * @return {}
     */
    function insert (array) {
      for (let i = 1; i < array.length; i++) {
        let item = array[i]
        let j = i - 1
        for (; j >= 0 && item < array[j]; j-- ) {
          array[j+1] = array[j]
        }
        array[j+1] = item
      }
    }
    
    let Array = [6, 2, 3, 1, 4, 5]
    insert(Array)
    console.log(Array)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    快速排序

    从数列中挑出一个元素,称为 “基准”,重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面。在这个分区退出之后,该基准就处于数列的中间位置。接下来再递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
    在这里插入图片描述

    /**
     * @description: 这里是描述
     * @param {type} paramName
     * @return {type} returnName
     */
    
    function quickSort(array, start, end) {
      if (start < end) {
        let base = array[start]
        let left = start
        let right  = end
        while(left < right) {
          while(left < right && array[right] >= base) {
            right--
          }
          array[left] = array[right]
          
          while(left < right && array[left] <= base) {
            left++
          }
          array[right] = array[left]
        }
        array[left] = base
        quickSort(array, start, left-1)
        quickSort(array, left+1, end)
      }
    }
    
    let arr = [4, 5, 8, 1, 7, 2, 6, 3];
    quickSort(arr, 0, arr.length - 1);
    console.log(arr);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    MongDB介绍及其下载地址
    算法通关村第十关-白银挑战数组最大K数
    合合信息、上海大学、华南理工大学发布业内首个古彝文编码“大字典” ,为古文字打造“身份证”
    数据持久化第七课-URL重写与Ajax
    408 考研《操作系统》第一章第三节:中断和异常、系统调用
    【AUTOSAR-Nm】-2.1-APP SWC如何获取CanNm/LinNm...状态机的跳转
    1002:输出第二个整数
    【python】JSON标准库文件介绍及python中json模块使用
    贪心算法----几个基本例题
    Dorkish:一款针对OSINT和网络侦查任务的Chrome扩展
  • 原文地址:https://blog.csdn.net/qq_45934504/article/details/127787097
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号