排序算法问题
给你一个整数数组 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 安装成功了,不过看了下版本好像不能正…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...