数学系C++ 排序算法简述(八)

目录

排序

选择排序 O(n2)

不稳定:48429

归并排序 O(n log n) 稳定

插入排序 O(n2)

堆排序 O(n log n)

希尔排序 O(n log2 n)

图书馆排序 O(n log n)

冒泡排序 O(n2)

优化:

基数排序 O(n · k)

快速排序 O(n log n)【分治】 不稳定

桶排序 O(n + k)

计数排序 O(n + k)

鸽巢排序 O(n + D)


排序

什么是稳定排序算法:数据先后次序不变

选择排序 O(n2) 归并排序 O(n log n)插入排序 O(n2) 堆排序 O(n log n)希尔排序 O(n log2 n) 图书馆排序 O(n log n)冒泡排序 O(n2) 基数排序 O(n · k)快速排序 O(n log n) 桶排序 O(n + k)计数排序 O(n + k)鸽巢排序 O(n + D):

选择排序 O(n2)

► 先找出最小值,将其与第一个位置的元素进行交换

► 对剩余的数据重复以上过程,直至排序结束

不稳定:48429

归并排序 O(n log n) 稳定

归并:如果有两个分别有序的数组,可以用双指针合并成一个完全有序的数组

可以递归写

也可以从0开始

归并1-1  1-1  1-1  1-1

归并   2-2          2-2

归并         4-4

完成!

插入排序 O(n2)

假设前面 k 个元素已经按顺序排好了,在排第 k+1个元素时,将其插入到前面已排好的 k 个元素中,使得插入后得到的 k+1 个元素组成的序列仍按值有序。

堆排序 O(n log n)

希尔排序 O(n log2 n)

基本过程描述如下:

① 把序列按照某个增量(gap)分成几个子序列,对这几个子序列进行插入排序。

② 不断缩小增量,扩大每个子序列的元素数量,并对每个子序列进行插入排序。

③ 当增量为 1 时,子序列就是整个序列,而此时序列已经基本有序了,因此只需做少量的比较和移动就可以完成对整个序列的排序

出发点:插入排序在元素基本有序的情况下,效率很高。

gap:初始值设为 n/2,然后不断减半。

图书馆排序 O(n log n)

冒泡排序 O(n2)

► 走访需要排序的序列,比较相邻的两个元素,如果他们的顺序错误就把他们交换过来。

► 不断重复上述过程,直到没有元素需要交换

具体过程:

► 将第 1 个和第 2 个元素进行比较,如果前者大于后者,则交换两者 的位置,否则位置不变;然后将第 2 个元素与第 3 个元素进行比较, 如果前者大于后者,则交换两者的位置,否则位置不变;依此类推, 直到最后两个元素比较完毕为止。这就是第一轮冒泡过程,这个过程 结束后,最大的元素就“浮”到了最后一个位置上。

► 对前面 n-1 个元素进行第二轮冒泡排序,结束后,这 n-1 个元素中 的最大值就被安放在了第 n-1个位置上。

……执行n-1轮

优化:

简单优化:

如果在某轮冒泡过程中没有发生元素交换,这说明整个序列已经排好序了,这时就不用再进行后面的冒泡过程,可以直接结束程序

进一步优化:

假设有 100 个数组成的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一轮冒泡过程后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二轮遍历是只要到这个位置就可以了。记录每轮遍历最后发生交换的位置,下次遍历只需到此位置为止

基数排序 O(n · k)

先排个位,再排十位,再排百味(30次)

快速排序 O(n log n)【分治】 不稳定

快速排序采用的是分而治之思想:将原问题分解为若干个规模更小但结构与原问题相似的子问题,然后递归求解这些子问题,最后将这些子问题的解组合为原问题的解

1.以第一个元素为基准书,使得基准书左边只有比他小的,右边只有比他大的

2.然后对基准书两边的数组分别进行操作1

分治:分成相同的子问题,用递归求解;子问题相互独立

dp:子问题不一定相同,具有最优子结构;子问题相互依赖

桶排序 O(n + k)

计数排序 O(n + k)

鸽巢排序 O(n + D)

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

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

相关文章

[240707] X-CMD v0.3.14: cb gh fjo zig 模块增强;新增 lsio 和 pixi 模块

目录 X-CMD 发布 v0.3.14✨ advise:Bash 环境下自动补全时,提供命令的描述信息✨ cb:支持下载指定版本的附件资源✨ gh:支持下载指定版本的附件资源✨ fjo:支持下载指定版本的附件资源✨ zig:新增 pm 和 zon 子命令✨ lsio:用于查…

Spring源码十二:事件发布源码跟踪

上一篇我们在Spring源码十一:事件驱动中,介绍了spring refresh方法的initMessageSource方法与initApplicationEventMulticaster方法,举了一个简单的例子进行简单的使用的Spring为我们提供的事件驱动发布的示例。这一篇我们将继续跟踪源码&…

vue3项目 前端blocked:mixed-content问题解决方案

一、问题分析 blocked:mixed-content其实浏览器不允许在https页面里嵌入http的请求,现在高版本的浏览器为了用户体验,都不会弹窗报错,只会在控制台上打印一条错误信息。一般出现这个问题就是在https协议里嵌入了http请求,解决方法…

【JavaEE】多线程进阶

🤡🤡🤡个人主页🤡🤡🤡 🤡🤡🤡JavaEE专栏🤡🤡🤡 文章目录 1.锁策略1.1悲观锁和乐观锁1.2重量级锁和轻量级锁1.3自旋锁和挂起等待锁1.4可…

nodejs + vue3 模拟 fetchEventSouce进行sse流式请求

先上效果图: 前言: 在GPT爆发的时候,各项目都想给自己的产品加上AI,蹭上AI的风口,因此在最近的一个需求,就想要给项目加入Ai的功能,原本要求的效果是,查询到对应的数据后,完全展示出来,也就是常规的post请求,后来这种效果遇到了一个很现实的问题:长时间的等待。我…

集成测试技术栈

前端 浏览器操作:playwright、selenium 后端 testcontainercucumbervitestcypressmsw

论文解析——FTRANS: Energy-Efficient Acceleration of Transformers using FPGA

作者及发刊详情 Li B , Pandey S , Fang H ,et al.FTRANS: energy-efficient acceleration of transformers using FPGA[J].ACM, 2020.DOI:10.1145/3370748.3406567. 摘要 正文 主要工作贡献 与CPU和GPU在执行Transformer和RoBERTa相比,提出的FTRANS框架获得了…

入门PHP就来我这(高级)13 ~ 图书添加功能

有胆量你就来跟着路老师卷起来! -- 纯干货,技术知识分享 路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。 今天给大家接着上篇文章编写图书添加功能。 1 添加页面 创建add.html页面样式,废…

acwing 291.蒙德里安的梦想

解法: 核心:先放横着的,再放竖着的。 总方案数,等于只放横着的小方块的合法方案数。 如何判断当前方案是否合法?所有剩余位置,能否填充满竖着的小方块。 即按列来看,每一列内部所有连续的空着的…

PTA甲级1005:Spell It Right

错误代码&#xff1a; #include<iostream> #include<vector> #include<unordered_map> using namespace std;int main() {unordered_map<int, string> map {{0, "zero"}, {1, "one"}, {2, "two"}, {3, "three&qu…

EN-SLAM:Implicit Event-RGBD Neural SLAM解读

论文路径&#xff1a;https://arxiv.org/pdf/2311.11013.pdf 目录 1 论文背景 2 论文概述 2.1 神经辐射场&#xff08;NeRF&#xff09; 2.2 事件相机&#xff08;Event Camera&#xff09; 2.3 事件时间聚合优化策略&#xff08;ETA&#xff09; 2.4 可微分的CRF渲染技术…

网络安全设备——防火墙

网络安全设备防火墙是一种用来加强网络之间访问控制的特殊网络互联设备。以下是对防火墙的详细解释&#xff1a; 一、定义与基本概念 定义&#xff1a;防火墙是指设置在不同网络&#xff08;如可信任的企业内部网和不可信的公共网&#xff09;或网络安全域之间的一系列部件的…

ts-01.泛型(函数和接口)

泛型 泛的意思是:漂浮, 比如泛舟; 泛型: 类型漂浮未定 > 动态类型. 用于: 函数 接口 类 T extends string | number 泛型约束 function a<T any, K> (: number, value: T) { // 泛型参数设置默认值anyconst arr Array<T>(l).fill(value) // [foo, foo, foo] }…

论文研读|AI生成图像检测发展历程及研究现状

前言&#xff1a;本篇博客系统性梳理AI生成图像检测的研究工作。 「人工智能生成图像检测」研究及发展现状介绍 参考资料 https://fdmas.github.io/AIGCDetect/针对AIGC检测的鲁棒性测试——常见攻击手段汇总论文研读&#xff5c;以真实图像为参考依据的AIGC检测论文研读&…

实验五 图像增强—空域滤波

一、实验目的 了解图像平滑滤波器&#xff08;均值滤波和中值滤波&#xff09;和图像锐化算子&#xff08;Sobel算子、Prewitt算子、Laplacian算子&#xff09;在工程领域中的应用&#xff1b;理解图像平滑滤波器和图像锐化算子的工程应用范围&#xff1b;掌握图像平滑滤波器和…

Netty学习(Netty入门)

概述 Netty是什么 Netty的地位 Netty的优势 HelloWorld public class HelloClient {public static void main(String[] args) throws InterruptedException {// 1. 启动类new Bootstrap()// 2. 添加 EventLoop.group(new NioEventLoopGroup())// 3. 选择客户端 channel 实现.…

如何恢复未保存的 Excel 文件

您是否曾经在处理 Excel 工作表时&#xff0c;电脑突然崩溃&#xff1f;您首先想到的是“进度保存了吗&#xff1f;”或“我是否按了 CtrlS 来保存文件&#xff1f;”这种压力是难以想象的&#xff0c;因为意外断电或电脑崩溃可能会让您所有的辛苦工作付诸东流。 无论对于学生…

前端技术(三)—— javasctipt 介绍:jQuery方法和点击事件介绍(补充)

6. 常用方法 ● addClass() 为jQuery对象添加一个或多个class <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&…

Educational Codeforces Round 167 (Rated for Div. 2)(A~C)题解

A. Catch the Coin 解题思路: 最终&#x1d465;一定会相等&#xff0c;我们考虑直接到下面接住他。 #include<bits/stdc.h> using namespace std; typedef long long ll; #define N 1000005 ll dp[N], w[N], v[N], h[N]; ll dis[1005][1005]; ll a, b, c, n, m, t; ll…

反编译kasada

继续研究反编译 这次的网站是 一个航司网站 他有 akamai和 kasada 两种防护 akamai 没啥好说的 结构分析 最开始有个长字符串 处理成 一个十几万的数组 通过 r.W[0] 走什么分支 还有数据的存取 M是一个98个函数组成的数组 代表不同的执行逻辑 这里给他转成了 switch case…