排序算法问题
给你一个整数数组 nums,请你将该数组升序排列。
示例 1:
输入:nums = [5,2,3,1] 输出:[1,2,3,5]
示例 2:
输入:nums = [5,1,1,2,0,0] 输出:[0,0,1,1,2,5]
代码如下:
1.插入排序(简单插入排序、直接插入排序)

//算法思想;从当前位置开始,从后往前找比数字小的,找到后插入到这个小的数字后面
//再找的过程中,如果发现一个比当前数字大,同时将这个数字往后移动
//时间复杂度:O(n^2) 空间复杂度O(1) 稳定性:稳定,没有跳跃式的交换数据
//直接插入排序的特点:越有序越快;完全有序能达到O(n);
class Solution {
public:void InsertSort(vector<int>& nums,int n){for(int i=0;i<n;i++) {int temp = nums[i];//记录未排序数组的下标int j = i-1;//记录已经排序数组的下标while(j >= 0 && nums[j] >temp) {nums[j+1] = nums[j];//当已经排序好的数组数字大于未排序的数组数字,将已经排序好的数字向后移一个j--;}nums[j+1] = temp;//如果未排序的数组数字大于已经排序好的数字,直接插入到排序好的数字后面}}vector<int> sortArray(vector<int>& nums) {int n=nums.size();InsertSort(nums,n);return nums;}
};
2.希尔排序

//直接插入排序越有序越快是希尔排序的一个理论基础
//算法描述:1.间隔式的分组 2.利用直接插入排序让组内有序 3.缩小分组再次排序 4.再次调用直接插入排序 ...直到缩为一组完全有序
//时间复杂度:O(n^1.3-n^1.5) 空间复杂度:O(1) 稳定性:不稳定
class Solution {
public:void ShellSort(vector<int>& nums,int n){int gap=n;while(gap>1)//间隔式分组,每一组利用直接插入排序,让组内有序{gap/=2;//每次分组都在上一组的基础上折半for(int i=gap;i<n;i++) {int temp = nums[i];int j = i-gap;while(j >= 0 && nums[j] >temp) {nums[j+gap] = nums[j];j-=gap;}nums[j+gap] = temp;}}}vector<int> sortArray(vector<int>& nums) {int n=nums.size();ShellSort(nums,n);return nums;}
};
3.冒泡排序
代码如下:
//两两比较,大的往后走
//时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性:稳定
class Solution {
public:void BubbleSort(vector<int>& nums,int n){for(int i=0;i<n-1;i++)//走的趟数{for(int j=0;j<n-i-1;j++)//每走一遍,最大的数字在最后面,走的次数越多,越往后面的数字排序越正确{if(nums[j]>nums[j+1])//两两交换,较大的数字在后面{int temp=nums[j];nums[j]=nums[j+1];nums[j+1]=temp;}}}}vector<int> sortArray(vector<int>& nums) {int n=nums.size();BubbleSort(nums,n);return nums;}
};
4.快速排序

代码如下:
//算法描述:先在数据中找到一个基准,从后往前找比基准小的数字,找到后往前挪动
//从前往后找比基准大的数字,找到往后挪动 重复之前的动作
//一次划分的时间复杂度:O(n) 划分logn次
//时间复杂度:O(nlogn) 空间复杂度:O(logn)(递归的次数)
//快排的缺点:空间复杂度大,不稳定
//快排最大缺点:越有序越慢,完全有序,为O(n^2)退化为选择排序
class Solution {
public:void QuickSort(vector<int>& nums,int left,int right){if(left>=right)//只有一个数或区间不存在{return;}int i=left,j=right;//i在最左边,j在最右边int base=nums[left];//定义最左边的数字为基准while(i<j){while(nums[j]>=base&&i<j)//从后往前找比这个比准数字小的{j--;}while(nums[i]<=base&&i<j)//从前往后找比这个基准数字大的{i++;}swap(nums[i],nums[j]);//找到之后交换两个数字}nums[left]=nums[i];//当i=j时,将基准数字与nums[i]交换nums[i]=base;//在一次完成之后,左边的数字都比基准数字小,右边的数字都比基准数字大QuickSort(nums,left,i-1);//递归左边QuickSort(nums,i+1,right);//递归右边}vector<int> sortArray(vector<int>& nums) {int n=nums.size();QuickSort(nums,0,n-1);return nums;}
};
5.选择排序
代码如下:
//算法描述:每次都从待排序中找到最小值和待排序的第一个交换
//时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性:不稳定
class Solution {
public:void SelectSort(vector<int>& nums,int n){int minIndex;for(int i=0;i<n-1;i++){minIndex=i;for(int j=i+1;j<n;j++){if(nums[minIndex]>nums[j]){minIndex=j;}}swap(nums[i],nums[minIndex]);}}vector<int> sortArray(vector<int>& nums) {int n=nums.size();SelectSort(nums,n);return nums;}
};
相关文章:
排序算法问题
给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums [5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 代码如下: 1.插入排序(简…...
PlotlyJs 指定画布的宽度并页面居中
可以通过CSS样式来实现指定画布的宽度并使其在页面居中。具体方法如下: 在HTML文件中定义一个div,用来包含PlotlyJs画布。如下所示: <div id"plotly-div"></div>在CSS样式中指定该div的宽度和居中方式。如下所示&…...
java基础-----第八篇
系列文章目录 文章目录 系列文章目录一、Java类加载器二、双亲委托模型 一、Java类加载器 JDK自带有三个类加载器:bootstrap ClassLoader、ExtClassLoader、AppClassLoader。 BootStrapClassLoader是ExtClassLoader的父类加载器,默认负责加载%JAVA_HOME…...
【Java 基础篇】StringBuilder的魔力:Java字符串处理探究
在Java编程中,字符串是一个常见的数据类型,用于存储文本信息。然而,与字符串相关的操作可能会导致性能问题,因为字符串是不可变的,每次对字符串进行操作都会创建一个新的字符串对象。为了解决这个问题,Java…...
Shell 编程技巧:批量转换Markdown文件
由于一些原因,需要将以前编写的所有markdown文件转成docx文件,以便做一个备份,特别是原文档中引用的图片需要嵌入docx文件,作本地化保存。先上脚本吧: sudo yum -y install pandoc # set new line char as IFS IFS$\…...
EasyAVFilter的初衷:把ffmpeg.c当做SDK来用,而不是当做EXE来用
之前我们做一个视频点播的功能,大概的流程就是将上传上来的各种格式的视频,用FFmpeg统一进行一次转码,如果probe到视频的编码格式是H.264就调用-vcodec copy,如果probe到视频的编码格式不是H.264就调用-vcodec libx264,…...
内存管理之:内存空间分布和栈攻击(黑客常用攻击手段)
目录 C语言内存管理及栈攻击 内存管理 Linux虚拟内存空间分布(重要) 栈溢出(栈攻击) 堆栈的特点 栈攻击 栈攻击的实现 原理 编译器选项 实现案例 linux修改栈空间大小方式 内存泄漏 如何避免野指针? 如何…...
一米facebook功能点
用户信息批量修改 可批量修改已登录用户的头像、密码、个人说明等信息。 小号批量刷赞、评论 可以批量用facebook小号给帖子、主页等刷赞或评论。 直播帖刷人气/评论/分享 可以直接刷直播帖子的人气、评论,并可一键分享到小组或个人时间线、公共主页等。 小组成员…...
uni-app:监听数据变化(watch监听、@input事件)
方法一:文本框监听,使用input事件 <template><view><input type"text" v-model"wip_entity_name" input"handleInputChange" /></view> </template><script> export default {data() {return {…...
提升C语言的方法?
我个人的习惯,学一门新的编程语言一定是需要目的的。 也就是学这个语言是干什么? 单纯的上学学习C语言一般都是工科的专业作为专业课而开设的学科,这种很多都是使用谭浩强的教材,很多同学也基本没听,所以学习效果也是…...
WPF_布局基础
布局容器 Grid 定义由列和行组成的灵活的网格区域。 行 <Grid.RowDefinitions><RowDefinition/><RowDefinition/></Grid.RowDefinitions> 列 <Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDe…...
【SA8295P 源码分析】87 - SA8295P HQNX + Android 编译环境搭建指导
【SA8295P 源码分析】87 - SA8295P HQNX + Android 编译环境搭建指导 一、Android 编译环境搭建:Android + sa8295p-hqx-4-2-4-0_hlos_dev_la.tar.gz1.1 更新 Ubuntu 18.04 源路径1.2 安装基础编译环境1.3 设置JDK8 的环境变量1.4 配置sh为bash(默认为dash)1.5 Android 编译…...
java基础-----第九篇
系列文章目录 文章目录 系列文章目录前言一、GC如何判断对象可以被回收前言 一、GC如何判断对象可以被回收 引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计 数为0时可以回收, 可达性分析法:从 GC Roots 开始向下搜索,搜索所走过的…...
数学建模--整数规划匈牙利算法的Python实现
目录 1.算法流程简介 2.算法核心代码 3.算法效果展示 1.算法流程简介 #整数规划模型--匈牙利算法求解 """ 整数规划模型及概念:规划问题的数学模型一般由三个因素构成 决策变量 目标函数 约束条件;线性规划即以线性函数为目标函数&a…...
OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字
目录 1.绘制直线line() 2.绘制圆形circle() 3.绘制椭圆形ellipse() 4.绘制矩形rectangle() 5.绘制多边形 fillPoly() 6.绘制文字putText() 7.例子 1.绘制直线line() CV_EXPORTS_W void line(InputOutputArray img,Point pt1, Point pt2,const Scalar& color,int t…...
[华为云云服务器评测] Unbutnu添加SSH Key、编译启动Springboot项目
系列文章目录 第一章 [linux实战] 华为云耀云服务器L实例 Java、node环境配置 第二章 [linux实战] Unbutnu添加SSH Key、启动Springboot项目 文章目录 系列文章目录前言一、任务拆解二、配置git,添加SSH Key2.1、登录远程主机2.2、配置git用户名和邮箱2.3、生成SSH key2.4、查…...
【MySQL学习笔记】(七)内置函数
内置函数 日期函数示例案例-1案例-2 字符串函数示例 数学函数其他函数 日期函数 示例 获得当前年月日 mysql> select current_date(); ---------------- | current_date() | ---------------- | 2023-09-03 | ---------------- 1 row in set (0.00 sec)获得当前时分秒…...
《Python魔法大冒险》004第一个魔法程序
在图书馆的一个安静的角落,魔法师和小鱼坐在一张巨大的桌子前。桌子上摆放着那台神秘的笔记本电脑。 魔法师: 小鱼,你已经学会了如何安装魔法解释器和代码编辑器。是时候开始编写你的第一个Python魔法程序了! 小鱼:(兴奋地两眼放光)我准备好了! 魔法师: 不用担心,…...
架构,平台,框架的区别和联系
1、解释说明 - 架构:在软件开发中,架构是指软件的整体设计和组织方式。它包括了软件的结构、组件和交互方式等方面的设计。架构定义了系统的高级结构和组织方式,以及各个组件之间的关系和交互方式。一个良好的架构可以提高软件的可维护性、可…...
Mac 安装php多版本,brew安装php8.0
因为需要我要在mac上装两个php版本,先前我已经装过php7.4,下面我们逐步安装php8.0 开始安装8.0: 直接运行安装 brew install php8.0 遇到问题怀疑是仓库太老了,更新一下homebrew ,重新安装 brew update 安装成功了,不过看了下版本好像不能正…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
