算法刷题介绍

news2025/1/16 8:08:32

算法刷题介绍

课程大纲

image-20221118182235023

Python 作为实现语言。

  • 快速排序算法 0 (nlogn)
    • 实际工作中要根据实际情况选择最优解。 有可能没有完美方案,需要做平衡。
  • 数据有啥特征?

    举例:对一组数据进行排序

    • 是否包含大量重复元素(三路快排)
    • 是否近乎有序的数据(插入排序)
    • 数据是否有固定的取值范围(计数有序)
      • 是否需要稳定排序?(归并排序更好)
  • 数据存储时使用的数据结构

    • 如果是使用链表存储的(归并排序)
    • 数据是否可以全部装入内存(外排)

算法复杂度介绍

常用排序算法介绍

  • 冒泡排序

    冒泡排序(Bubble Sort)是一种很原始的排序方法,就是通过不断地交换“大数”的位置达到排序的目的。
    因为不断出现 “大数” 类似于水泡不断出现,因此被形象地称为 冒泡算法。
    
    冒泡算法的基本原理:比较相邻两个数字的大小。将两数中比较大的那个数交换到靠后的位置。
    不断地交换下去就可以将最大的那个数放到队列的尾部。然后重头再次交换,直到将数列排列成有序数列。
    
    image-20221119113248574 image-20221119113333029

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kgwptDVt-1668843863167)(https://s1.vika.cn/space/2022/11/19/5d1251ed4b23442598dbcf73c24b1dbe)]

    冒泡排序原理:
    1. 通过不断地交换 “大数” 的位置达到排序的目的
    2. 冒泡排序的时间复杂度是O(n^2)
  • 选择排序

    与冒泡排序相比,选择排序算法(Selection Sort)的原理更加简单粗暴,就是在数列中不断地找最小(大)的那个数。
    
    选择排序算法的基本原理:从数列中选择最大(最小)的那个数,将这个数放到合适的位置,然后再删除这个数的子数列中选择最大(最小)的那个数,将这个数放到合适的位置......直到子数列为空。
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHpZtr5P-1668843863168)(https://s1.vika.cn/space/2022/11/19/4b6b6785e6914b558069916a222d2fec)]

    image-20221119114955448
    选择排序原理:
    1. 不断将数列中的最小值交换到数列头部实现排序
    2. 选择排序的时间复杂度是0(n^2)
  • 插入排序

    插入排序(Insertion Sort)很容易理解,插入排序方法与打扑克牌的排序很相似。在打扑克时,每抓一张新牌,都会与手上已有的牌进行比较,将新派插入到比自己小的牌后面。在取完所有的牌后,手上已有的牌就是个有序的序列。
     
    插入排序原理:首先将数列分成两部分。 数列的第一个数为left部分,其他的数为right部分。然后将right部分中的数逐一取出,插入left部分中合适的位置。 当right部分为空,left部分就成为了一个有序数列。
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PUit8VVd-1668843863169)(https://s1.vika.cn/space/2022/11/19/8e15a25c720b403a9de669a5d4b26838)]

    image-20221119122314154
  • 归并排序

    归并排序(Merge Sort)是一种典型的递归法排序。它把复杂的排序过程分解成一个简单的合并子序列的过程。
    
    归并排序原理:先将数列分成左右两份(最好是等分),然后将左、右子数列排序完毕后再合并到一起就成了一个有序数列左、右两个子数列变成有序数列的过程是一个递归过程:再把子数列分成左、右两份,把子子数列排序完毕后合并成子数列...
    
    image-20221119124127387 image-20221119124210836
    归并排序原理:
    1. 将数列不断分成两组直到不能再分,在合并时排序
    2. 归并排序的时间复杂度是O(nlogn)
  • 快速排序

    快速排序(Insertion Sort)也是一种递归排序算法。
    
    快速排序原理:先以列表中的任意一个数为基准(一般选头或尾),将列表分为左、右两个子列表:
    左子列表的数要比基准数小,右子列表的数要比基准数大。 然后继续把左子列表和右子列表按同样的方法继续分解、比较,直到分无可分。最后将左子列表(比基准数小)+基准数+右子列表(比基准数大)连接起来得到一个有序数列。
    
    image-20221119145058454
  • 计数排序

    计数排序(Counting Sort)是一种稳定的线性时间排序算法。该算法于1954年由 Harold H.Seward 提出的。
    
    计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。
    然后根据数组C来将A中的元素排到正确的位置。
    
    image-20221119150023676 image-20221119152542396

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WF1OuGPN-1668843863170)(https://s1.vika.cn/space/2022/11/19/3cce076246ee44b29f6d0892a9c1b3cf)]

    image-20221119152645300

    计数排序代码:

    image-20221119152914889
    计数排序原理:
    1. 找出待排序的数组中最大和最小的元素
    2. 统计数组中每个值为i的元素出现次数,存入数组C的第i项
    3. 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)
    4. 反向填充目标数组:将每个元素ii放在新数组的第C[i]项,每放一个元素就将C[i]减去1
      出待排序的数组中最大和最小的元素
    5. 统计数组中每个值为i的元素出现次数,存入数组C的第i项
    6. 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)
    7. 反向填充目标数组:将每个元素ii放在新数组的第C[i]项,每放一个元素就将C[i]减去1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微服务治理之监控APM】系统监控架构概述

APM 简介 APM 通常认为是 Application Performance Management 的简写,它主要有三个方面的内容,分别是 Logs(日志)、Traces(链路追踪)Metrics(报表统计)。 以后大家接触任何一个 APM 系统的时候,都可以从这三个方面去分析它到底是什么样的…

vue中scoped原理与样式穿透原理

是什么 在vue组件中的style标签上有一个特殊属性:”scoped“ 为什么 当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,通过该属性,可以使得组件之间的样式不互相污染。 怎么样实现的 1.为组件实例生成一个唯一…

[附源码]SSM计算机毕业设计智能视频推荐网站JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

codeforces:F. All Possible Digits【贪心 + 模拟进位】

目录题目截图题目分析ac code总结题目截图 题目分析 注意是只能再最后一位加我们要使得0到p - 1都出现至少一次统计出现的数字aset考虑最后一位pivot情况1:如果pivot前都出现了,就不用进位了,pivot只需要加到最大的未出现在aset的num即可情况…

【编程题】【Scratch二级】2022.09 小老鼠偷面包

小老鼠偷面包 1. 准备工作 (1)背景:Stars,绘制如下图所示的迷宫; (2)角色:Cat 2、Mouse1、Bread。 2. 功能实现 (1)Cat 2、Mouse1和Bread初始位置和方向如…

机器人C++库(12) Robotics Library 之路径规划算法:PRM、RRT、EET算法

机器人C库(12)Robotics Library 之路径规划算法:PRM、RRT、EET算法 RL库的运动规划(rl::plan)模块集成了以下经典的路径规划算法: PRM算法:概率路线图算法RRT算法:快速探索随机树算法EET算法:搜索树算法-基…

牧场系统设计与实现-计算机毕业设计源码+LW文档

关键代码 package com.example.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.huto…

japonensisjava乱码_Java乱码问题原因及解决方案

一. java乱码乱码问题解决思路,java乱码分为以下几种 1. 请求乱码 如果是在请求过程中发生的乱码,有可能是以下几种情况: 参数放在 URL 地址中乱码; 参数在请求体中乱码; 数据库本身乱码; 数据从 Java 应用程序传入数据库的过程中乱码。 2. 响应乱码 如果是响应乱码,那…

Go语言学习(八)-- Gin入门

Gin 是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快。Gin 最擅长的就是 Api 接口的高并发,如果项目的规模不大,业务相对简单,这个时候我们 也推荐您使用 Gin。 当某个接口的性能遭到较大挑战的时候,这…

Prometheus监控案例

一:环境规划: 主机名主机地址角色node4192.168.188.114prometheus客户端node5192.168.188.115prometheus服务端 二. 监控远程linux主机: 1. 解压node_exporter压缩包: [rootnode4 ~]# tar xf node_exporter-1.3.1.linux-amd64…

RT-Thread 下的文件内容对比 MSH shell cmd 命令实现方法

前言 在使用 RT-Thread 时,需要对两个文件的内容进行比较,顺手写了一个测试的 MSH shell 命令,经过优化,发现功能可以使用 RT-Thread 下支持多种文件系统,如FAT等,可以通过 USB、串口 的 Ymodem 等协议把文…

YOLOv5-seg数据集制作、模型训练以及TensorRT部署

YOLOv5-seg数据集制作、模型训练以及TensorRT部署版本声明一、数据集制作:图像 Json转txt二、分割模型训练三 tensorRT部署版本声明 yolov5-seg:官方地址:https://github.com/ultralytics/yolov5/tree/v6.2 TensorRT:8.x.x 语言:…

基于stm32单片机体重秤电子秤超重提醒

资料编号:107 下面是相关功能视频演示: 107-基于stm32单片机体重秤电子秤称重超重报警Proteus仿真(源码仿真全套资料)功能介绍: 采用stm32单片机,可以设置称重上限制,LCD1602显示重量&#xf…

04_tcp

知识点1【多播】 多播地址: 多播地址向以太网MAC地址的映射 UDP多播工作过程: 多播地址结构体: 多播套接口选项: 知识点2【TCP面向链接编程】 1、创建tcp套接字 2、做为客户端需要具备的条件 3、connect链接服务器的函数…

地图下载白嫖神器!你该怎么用好它

今天介绍一下做数据可视化网站比较好的两个平台。一个是阿里云的Datav,另一个是易智微easyv. 一、DataV.GeoAtlas 前段时间 我们就给大家分享过阿里云的DataV.GeoAtlas地理小工具系列。我们可以通过这个平台下载高德比较新的地图数据,数据的时效性是有较…

如何查看SAP版本及HANA版本?

目录 一、查SAP NetWeaver版本 二、查看S/4 HANA版本 在SAP运维及系统集成时,经常外面公司问及本公司的SAP版本及HANA版本。其实是每一个登录SAP的用户都可以查到的。方法如下: 一、查SAP NetWeaver版本 SAP界面上选择菜单:系统-状态&am…

哈夫曼树与哈夫曼编码

哈夫曼树:结点中赋予一个某种意义的值,称为结点的权值,从根结点开始,到目标结点经过的边数,称为路径长度,路径长度乘以权值,称为带权路径长度; 例如:根结点代表着快递集…

上位机工业协议-S7COMM

1、S7协议主要针对西门子相关设备通信。先了解基本通信对象、通信环境、通信报文,再处理S7COMM通信库的封装与测试。 2、西门子设备通信 - PLC:系列 LOGO、200、200Smart、300、400、1200、1500 - PLC:LOGO、200、200Smart、300、400、1…

Elastic Stack容器化部署拓展(Https、AD域集成)并收集Cisco设备的日志信息

前言: 还记得在去年的笔记中提到过EFK(Elasticsearch-Filebeat-Kibana)的部署,但是其中的内容相对简单,也没有提到一些额外的Elastic Stack的特性。链接如下:https://blog.csdn.net/tushanpeipei/article/…

JSTL使用

目录 简介: 组成 使用: code核心库使用 ​编辑 fmt格式化 ​编辑 简介: 全称:JSP Standard Tag Library 中文名:JSP标准标签库 作用:用于扩展JSP中的标签,能够为JSP页面提供流程控制、类型转换等功能的标签。替换JSP中代码…