一、八大排序(sort)

文章目录

  • 一、时间复杂度
    • (一)定义:常数操作
  • 二、空间复杂度
    • (一)定义:
  • 三、排序
    • (一)选择排序
      • 1.定义
      • 2.代码
      • 3.特性
    • (二)冒泡排序
      • 1.定义
      • 2.代码
      • 3.特性
    • (三)插入排序
      • 1.定义
      • 2.代码
      • 3.特性
    • (四)归并排序
      • 1.定义
      • 2.代码
      • 3.特性
    • (五)快速排序
    • (六)堆排序
    • (七)基数排序
    • (八)计数排序

一、时间复杂度

(一)定义:常数操作

与数据量无关,是一个固定的东西。
一个操作如果和样本数量没有关系,每次都是固定时间内完成的操作,就叫做常数操作。

时间复杂度为一个算法流程中,常数操作数量的一个指标。常用o(读作big o)来表示。具体来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作,进而总结出常数操作数量的表达式。

评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行时间,也就是“常数项时间”。

二、空间复杂度

(一)定义:

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势。

三、排序

(一)选择排序

1.定义

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
请添加图片描述

2.代码

void process(vector<int> &arr) {if (arr == nullptr || arr.size() < 2) {return ;}for (int i = 0 ; i < arr.size() - 1; i++) { // 当前位置int minIndex = i;for (int j = i + 1; j < arr.size(); j++) {minIndex = arr[j] < arr[minIndex] ? j : minIndex;}swap(arr,i,minIndex);}
}
void swap(vector<int> &arr,int j,int j) {arr[i] = arr[i] ^ arr[j];arr[j] = arr[i] ^ arr[j];arr[i] = arr[i] ^ arr[j];
}

3.特性

  • 容易理解,但是效率太低,实际当中不太使用

  • 时间复杂度O(n^2),空间复杂度O(1);请添加图片描述

  • 不稳定

(二)冒泡排序

1.定义

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

2.代码

void bubbleSort(vector<int> &arr) {if (arr == nullptr || arr.size() < 2) {return ;}int n = arr.size();for (int i = 0; i < n; i++) { // //控制交换次数for (int j = 0; j < n - i - 1; j ++) { // //向后冒泡 ,控制边界if(arr[j] > arr[j+1])//如果前一个值大于后一个值,交换{swap(arr[j],arr[j+1]);}		}}
}

3.特性

  • 容易理解
  • 时间复杂度O(n^2),空间复杂度O(1)
  • 稳定

(三)插入排序

1.定义

插入排序的步骤如下:每次从无序部分中取出一个元素,与有序部分中的元素从后向前依次进行比较,并找到合适的位置,将该元素插到有序组当中。

例:对于数组 [3,2,5,4,2,3,3] 进行插入排序的详细过程:
1、0~0位置上做到有序 ——>就一个数 做到了
2、0~1位置上做到有序 ——>2比3小 2 3互换位置——> [2,3,5,4,2,3,3]
3、0~2位置上做到有序 ——>5比3大 位置不动——> [2,3,5,4,2,3,3]
4、0~3位置上做到有序 ——>4比5小 4 5互换位置——> [2,3,4,5,2,3,3]——>4比3大 位置不动
5、0~4位置上做到有序 ——>2比5小 2 5互换位置——> [2,3,4,2,5,3,3]
  ——>2比4小 2 4互换位置——> [2,3,2,4,5,3,3]——>2比3小 2 3互换位置——> [2,2,3,4,5,3,3]
  2比2相等 位置不动
6、0~5位置上做到有序 ——>3比5小 3 5互换位置——> [2,2,3,4,3,5,3]
  ——>3比4小 3 4互换位置——> [2,2,3,3,4,5,3]——>3比3相等 位置不动
7、0~6位置上做到有序 ——>3比5小 3 5互换位置——> [2,2,3,3,4,3,5]
  ——>3比4小 3 4互换位置——> [2,2,3,3,3,4,5]——>3比3相等 位置不动

请添加图片描述

2.代码

void insertSort(vector<int> &arr) {if (arr == nullptr || arr.size() < 2) {return ;}for (int i = 1; i < arr.size(); i++) { // 0 - 0 有序的for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1] ; j--) { // 想有序swap(arr,j, j + 1);}}
}

3.特性

  • 元素集合越接近有序,直接插入排序算法的时间效率越高
  • 时间复杂度:O(n^2)(情况最差时,即逆序转有序,最好为O(n));
  • 空间复杂度:O(1);
  • 稳定

(四)归并排序

1.定义

对于一个数组从中点的位置分开,先让左侧部分排好序,再让右边部分排好序,然后整体整合。

将图中左侧部分和右侧部分分别排好序,然后使用两个指针分别从两部分的最左侧开始,在内存中单独开辟一个空间 ,这时我们比较两个指针指向的数的大小,左侧小于等于右侧的时候,将左侧部分指针指向的值拷贝到辅助空间中,然后左侧指针右移一位。如果右侧部分指针指向的值小于左侧的,则将右侧部分指针指向的值拷贝到辅助空间中,然后右侧指针右移一位。依次循环,如果哪侧越界了,将剩下的部分直接拷贝到辅助空间中。将辅助空间拷贝到原数组。
请添加图片描述

2.代码

3.特性

  • 整体就是简单的递归,左边排好序、右边排好序、让整体有序
  • 让其整体有序的过程里用了排外序的方法
  • 利用master公式来求解时间复杂度
  • 归并排序的实质

(五)快速排序

(六)堆排序

(七)基数排序

(八)计数排序

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

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

相关文章

雷龙CS SD NAND(贴片式TF卡)性能体验及应用

前段时间有幸得到了雷龙出品的贴片式的TF卡的芯片及转接板&#xff0c;从而对其产品进行了相应的了解和测评。 从获得的相关资料看&#xff0c;雷龙出品的贴片式芯片分为两类&#xff0c;即BOW型和AOW型&#xff0c;其中BOW型为第一代产品&#xff0c;属商业级&#xff1b;AOW…

Jackson 配置 Bigdecimal 序列化

笔者的项目使用了 jackson 序列化 要求 主要是两个方面&#xff1a; 位数&#xff1a;位数大于等于 4&#xff0c;则保留 4 位小数&#xff0c;否则保留对应的小数位数;格式&#xff1a;不出现科学技术法&#xff0c;不以 0 结尾. 代码 序列化实现&#xff1a; public cla…

【网络协议】Http-中

搜索引擎&#xff1a;搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上采集信息&#xff0c;在对信息进行组织和处理后&#xff0c;为用户提供检索服务&#xff0c;将检索的相关信息展示给用户的系统。搜索引擎是工作于互联网上的一门检索技术&#xff0c;它旨在提…

简明 SQL 组合查询指南:掌握 UNION 实现数据筛选

在SQL中&#xff0c;组合查询是一种将多个SELECT查询结果合并的操作&#xff0c;通常使用UNION和UNION ALL两种方式。 UNION 用于合并多个查询结果集&#xff0c;同时去除重复的行&#xff0c;即只保留一份相同的数据。UNION ALL 也用于合并多个查询结果集&#xff0c;但不去除…

java 通过读配制文件的方式连接库。 信息保存在文件内

# JDBC配置 db.urljdbc:mysql://mysql.sqlpub.com:3306/huangjin db.usernameXXXXXXXX db.passwordfc12f7a5215e8e0a package com.abc.project3;import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.sql.*; import java.util.Prope…

XSS跨站脚本攻击

XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击,XSS属于客户端攻击&#xff0c;受害者最终是用户&#xff0c;在网页中嵌入客户端恶意脚本代码&#xff0c;最常用javascript语言。&#xff08;注意&#xff1a;叠成样式表CSS已经被占用所以叫XSS&#xff09…

Mac使用sz/rz

从使用体验上说,sz/rz要比scp要好得多.但Mac上使用这两个命令需要进行相应配置. sz&#xff1a;将选定的文件发送&#xff08;send&#xff09;到本地机器 rz&#xff1a;运行该命令会弹出一个文件选择窗口&#xff0c;从本地选择文件上传到Linux服务器 下载安装lrzsz brew i…

浅谈Vue3——父子组件传值

引言 Vue.js是一款流行的JavaScript框架&#xff0c;用于构建用户界面。它提供了一种简洁、灵活的方式来管理和渲染数据。在Vue3中&#xff0c;父子组件之间的数据传递是一个常见的需求。本文将介绍如何在Vue3中传递对象&#xff0c;并且在子组件中访问和修改父组件对象中的属…

探索智能应用的基石:多模态大模型赋能文档图像处理

目录 0 写在前面1 文档图像分析新重点2 token荒&#xff1a;电子文档助力大模型3 大模型赋能智能文档分析4 文档图像大模型应用可能性4.1 专有大模型4.2 多模态模型4.3 设计思路 总结 0 写在前面 中国智能产业高峰论坛(CIIS2023)旨在为政企研学各界学者专家提供同台交流的机会…

rom修改----安卓系列机型如何内置app 如何选择so文件内置

系统内置app的需求 在与各工作室对接中操作单中&#xff0c;很多需要内置客户特定的有些app到系统里&#xff0c;这样方便客户刷入固件后直接调用。例如内置apk 去开机引导 去usb调试 默认开启usb安全设置等等。那么很多app内置有不同的反应。有的可以直接内置。有的需要加so…

基于 Socket 网络编程

基于 Socket 网络编程 前言一、基于Socket的网络通信传输&#xff08;传输层&#xff09;二、UDP 的数据报套接字编程1、UDP 套接字编程 API2、使用 UDP Socket 实现简单通信 三、TCP 流套接字编程1、TCP 流套接字编程 API2、使用 TCP Socket 实现简单通信3、使用 Tcp 协议进行…

【实战案例】技术转项目经理容易踩的坑,我都踩了

“带团队容易&#xff0c;带好团队难。” 这是身边一位项目经理近期在团队管理方面的深刻感悟。目前&#xff0c;他手上的一个项目被迫暂停了&#xff0c;项目团队也散了。下面给大家简要分享下这个项目案例。 【案例分享】 小李负责的是一个二次开发的项目&#xff0c;所涉及…

ULID 在 Java 中的应用: 使用 `getMonotonicUlid` 生成唯一标识符

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

从零开始学网站建设:从需求分析到上线发布

从零开始学网站建设&#xff1a;从需求分析到上线发布 一、需求分析 首先&#xff0c;要成功地建设一个网站&#xff0c;需要进行深入的需求分析。这涉及到与潜在用户进行沟通&#xff0c;了解他们的需求和期望。在这个过程中&#xff0c;我们需要明确网站的目标和定位&#…

python MP4视频转GIF动图

python MP4视频转GIF动图 引言一、转换代码二、PyQt界面编写2.1 效果展示2.2 源码 三、打包成可执行文件(.exe) 一个相当于原视频三倍速的GIF动图 引言 将MP4格式的视频转为GIF动图可以方便地向他人展示动画效果。GIF是网络上广泛使用的图像格式之一&#xff0c;几乎所有的网…

C#-WinForm-发送邮件

登录QQ邮箱——设置——开启“POP3/SMTP服务” 登陆QQ邮箱→打开设置→开启“POP3/SMTP服务”&#xff0c;获取“授权码” 简单总结一下&#xff1a; 1、使用SmtpClient发送电子邮件是很简单的&#xff0c;只要正确创建了MailMessage对象和SmtpClient就可以很容易的发送出去电…

大二层—多链接透明互联协议如何工作

大二层就引入了 TRILL&#xff08;Transparent Interconnection of Lots of Link&#xff09;&#xff0c;即多链接透明互联协议。它的基本思想是&#xff0c;二层环有问题&#xff0c;三层环没有问题&#xff0c;那就把三层的路由能力模拟在二层实现。 运行 TRILL 协议的交换…

c语言进阶部分详解(指针进阶2)

大家好&#xff01;我快马加鞭接着写出指针部分part2部分。第一部分见&#xff1a;c语言进阶部分详解&#xff08;指针进阶1&#xff09;_总之就是非常唔姆的博客-CSDN博客 指针初阶部分见&#xff1a;c语言进阶部分详解&#xff08;指针初阶&#xff09;_总之就是非常唔姆的博…

CSP-J 2023 入门级 第一轮 阅读程序(2)

【题目】 CSP-J 2023 入门级 第一轮 阅读程序&#xff08;2&#xff09; #include <iostream> #include <vector> #include <algorithm> using namespace std; int f(string x, string y) {int m x.size();int n y.size();vector<vector<int>&g…

【计算机网络】深入理解TCP协议二(连接管理机制、WAIT_TIME、滑动窗口、流量控制、拥塞控制)

TCP协议 1.连接管理机制2.再谈WAIT_TIME状态2.1理解WAIT_TIME状态2.2解决TIME_WAIT状态引起的bind失败的方法2.3监听套接字listen第二个参数介绍 3.滑动窗口3.1介绍3.2丢包情况分析 4.流量控制5.拥塞控制5.1介绍5.2慢启动 6.捎带应答、延时应答 1.连接管理机制 正常情况下&…