选择排序:是一种简单直观的排序算法,每次均是选择最小(大)的元素进行排序。

选择排序算法思想:1 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

2 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾

重复第2步,直到排序完成、时间复杂度为 n^2  空间复杂度为 1

这种算法的优点是时间复杂度高,并且会改变相同元素的相对位置,因此这个是一种不稳定的排序算法

代码练习1,对应力扣 颜色分类,代码见下

class Solution {
public:void selectionSort(vector<int>& a){int n = a.size();for(int i = 0; i<n; ++i){int min = i;for(int j = i+1; j<n; ++j){if(a[min] > a[j]){min = j; }}int tmp = a[min];a[min] = a[i];a[i] = tmp;}} void sortColors(vector<int>& nums) {selectionSort(nums);}
};

冒泡排序:是一种简单的排序算法,通过多次比较和交换相邻的元素,将数组中的元素按升序或降序排列

冒泡排序的算法思想:

1 遍历数组的第一个元素到最后一个元素

2 对每一个元素,与后一个元素进行比较

3 如果顺序错误,就将他们交换

重复上述步骤,直至数组中的所有元素至少被遍历过一次

冒泡排序的时间复杂度为0(n^2),空间复杂度为0(1)

冒泡排序的算法优点:是一种稳定的算法,不会改变相同元素的相对位置,缺点便是效率低下,时间复杂度较高

代码一,对应力扣,合并两个有序数组,代码见下

class Solution {void bubbleSort(vector<int>& a){int n = a.size();for(int i = n-1; i>=0; --i){for(int j=0; j<i; ++j){if(a[j] > a[j+1]){int tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;}}}}
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {for(int i=0; i<nums2.size(); ++i){nums1[m+i] = nums2[i];}bubbleSort(nums1);}
};

代码2 对应力扣,最后一块石头的重量,代码见下:

class Solution {void bubbleSort(vector<int>& a){int n = a.size();for(int i=n-1; i>=0; --i){for(int j=0; j<i; ++j){if(a[j] > a[j+1]){int tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;}}}}
public:int lastStoneWeight(vector<int>& stones) {while(stones.size() > 1){bubbleSort(stones);int n = stones.size();int v = stones[n-1] - stones[n-2];stones.pop_back();stones.pop_back();if(v || stones.size() == 0){stones.push_back(v);}}return stones[0];}
};

插入排序:工作原理是通过构建有序序列,对于未排序序列,在已排序序列中从后往前扫描,找到对应位置插入,从而使得有序。

算法步骤:1 从第一个元素开始,将它视为已排序部分

2 取出下一个元素,与已排序的元素进行比较

3 如果该元素小于已排序部分的最后一个部分,则将其插入到已排序部分的适当位置,重复 2和3直到完成排序

插入排序的时间复杂度为O(n^2),空间复杂度为O(1)

代码练习 1,对应力扣,去掉最低工资和最高工资后的工资平均值,代码见下

class Solution {void insertSection(vector<int>& a){for(int i=1; i<a.size(); ++i){int x = a[i];int j;for( j=i-1; j>=0; --j){if(x < a[j]){a[j+1] = a[j];}else{break;}}a[j+1] = x;}}
public:double average(vector<int>& salary) {insertSection(salary);int n = salary.size();double sum = 0;for(int i=1; i<n-1; ++i){sum += salary[i];}return sum / (n-2);}
};

代码 2,对应力扣删除某些元素后的数组均值,代码见下

class Solution {void insertionSort(vector<int>& a){for(int i=1; i<a.size(); ++i){int x = a[i];int j;for(j=i-1; j>=0; --j){if(x < a[j]){a[j+1] = a[j];}else{break;}}a[j+1] = x;}}
public:double trimMean(vector<int>& arr) {insertionSort(arr);int n = arr.size();double sum = 0;int cnt = 0;for(int i = n/20; i<n-n/20; ++i){sum += arr[i];cnt++;}return sum/cnt;}
};

代码 3,学生分数的最小差值,代码见下

class Solution {void insertionSort(vector<int>& a){for(int i=1; i<a.size(); ++i){int x = a[i];int j;for(j=i-1; j>=0; --j){if(x < a[j]){a[j+1] = a[j];}else{break;}}a[j+1] = x;}}
public:int minimumDifference(vector<int>& nums, int k) {insertionSort(nums);int ret = 100000000;for(int i=0; i + k - 1 < nums.size(); ++i){int l = i;int r = i + k - 1;ret = min(ret, nums[r] - nums[l]);}return ret;}
};

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

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

相关文章

Linux入门篇学习——Linux 编写第一个自己的命令,make 工具和 makefile 文件

目录 一、Linux 编写第一个自己的命令 1.命令的概念 2.定义一个自己的命令 二、make 工具和 makefile 文件 1.使用 make 工具 2.makefile文件 一、Linux 编写第一个自己的命令 1.命令的概念 命令就是可执行程序。 比如说我们输入 ls -al &#xff0c;ls 就是可执行程序的…

实验一 接苹果

主要步骤苹果树制作&#xff08;苹果与篮子的制作同理&#xff09;为苹果添加标签相机位置设置与游戏面板长宽比设置&#xff08;16:9&#xff09;苹果下落设置&#xff08;将苹果从平抛运动改为垂直下落&#xff09;通过设置物理图层并更改碰撞矩阵表实现通过PlayerPrefs实现游…

Nginx服务器集群:横向扩展与集群解决方案

横向扩展&#xff1a;基础概念 在深入了解Nginx的横向扩展细节之前&#xff0c;首先理解横向扩展的含义及其重要性。横向扩展是指通过增加服务器数量来分散负载并提升整体性能。这与纵向扩展形成对比&#xff0c;纵向扩展是指在单个服务器上增加更多资源&#xff08;如CPU、内…

缺陷的生命周期(Bug Life Cycle)是什么?

一、缺陷生命周期的定义缺陷生命周期是指一个Bug从被发现到最终关闭的完整流程&#xff0c;反映了缺陷在不同角色&#xff08;测试、开发、产品等&#xff09;间的流转状态。它是软件测试流程的核心管理模型&#xff0c;直接影响团队协作效率。二、标准缺陷生命周期阶段以下是通…

AtCoder Beginner Contest 333(A,B,C,D,E,F)

AtCoder Beginner Contest 333 A 题意 输出n个n(n<9) 代码 #include<bits/stdc.h> using namespace std; void solve(){int n;cin>>n;for(int i1;i<n;i)cout<<n; } signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__1;//cin…

留学真相:凌晨两点被海关拦下时,我才明白人生没有退路

> 独立不是选择&#xff0c;而是生存的必修课下飞机那一刻&#xff0c;幻想中的“镀金生活”瞬间崩塌。伦敦海关凌晨两点的灯光下&#xff0c;你颤抖着翻找学校文件&#xff0c;手机信号格空空如也&#xff1b;大巴误点后&#xff0c;你拖着两个32公斤的行李箱站在阴雨中&am…

探索AIGC领域DALL·E 2的图像生成与人类创意的融合

探索AIGC领域DALLE 2的图像生成与人类创意的融合关键词&#xff1a;AIGC、DALLE 2、图像生成、人类创意、创意融合摘要&#xff1a;本文聚焦于AIGC领域中DALLE 2的图像生成技术与人类创意的融合。首先介绍了相关背景&#xff0c;包括DALLE 2的发展历程和人类创意在艺术创作中的…

【ECharts】多个ECharts版本共存解决方案

多个ECharts版本共存解决方案 在单个HTML页面中使用多个ECharts版本的关键在于避免全局命名空间冲突。下面我将展示一个完整的解决方案&#xff0c;包含两种不同的实现方法。 解决方案思路命名空间隔离法&#xff1a; 使用不同的全局变量名保存不同版本的ECharts在加载新版本前…

力扣热门算法题 204.计数质数,207.课程表,213.打家劫舍II

力扣热门算法题 204.计数质数&#xff0c;207.课程表&#xff0c;213.打家劫舍II&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2025.07.07 可通过leetcode所有测试用例。 目录 204.计数质数 解题思路 完整代码 207.课程表 解题思…

深入理解 macOS 的 quarantine、xattr 与 Gatekeeper

在 macOS 上安装第三方应用时&#xff0c;你是否遇到过如下提示&#xff1f; “xxx.app 已损坏&#xff0c;无法打开。”“无法打开‘xxx.app’&#xff0c;因为它来自身份不明的开发者。”“你确定要打开这个应用吗&#xff1f;它是从互联网下载的。” 这些提示背后&#xff0…

FastAPI学习笔记记录

FastAPI 学习笔记 最近在公司中需要写接口&#xff0c;选取了fastapi这个框架&#xff0c;一个原因是FastAPI 是主流框架&#xff0c;同时FastAPI 有着高性能&#xff0c;支持异步和高并发。 FastAPI 安装 直接用下面两行命令进行安装 pip3 install fastapi pip install uvicor…

HTML(上)

1.web标准主要包括结构(Structure)、表现(Presentation)和行为(Behavior)三个方面。1.1 结构结构用于对网页元素进行整理和分类&#xff0c;核心技术&#xff1a;HTML。 HTML (HyperText Markup Language)&#xff1a;超文本标记语言&#xff0c;用于定义网页的内容和结构&…

杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析

杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析 文章目录杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析**一、公司背景&#xff1a;智慧养老赛道领跑者****1. 基础信息****2. 发展里程碑****二、产品体系&#xff1a;全域智慧养老解决方案…

kettle从入门到精通 第101课 ETL之kettle DolphinScheduler调度kettle

1、下载DolphinSchedulerDolphinScheduler官网下载安装包&#xff0c;选择合适的版本进行下载&#xff0c;地址为https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9/guide/installation/standalone2、启动 DolphinScheduler Standalone Server我这里仅仅为了测试使用&…

微信小程序121~130

1.小程序功能开发-首页功能 通过并发请求获取首页的数据。 // 导入封装的网络请求模块实例 import http from ../utils/http // 定义接口api函数 export const reqIndexData () > {// 通过方式请求并获取首页数据&#xff0c;提升页面渲染速度// 通过Promise.all进行并发请…

Java Stream流:高效数据处理全解析

Java Stream 流详解 Stream 是 Java 8 引入的 API&#xff0c;用于高效处理集合数据&#xff08;如 List、Set、Map 等&#xff09;。它支持函数式编程风格&#xff0c;能实现复杂的查询、过滤、映射等操作&#xff0c;并支持并行处理以提升性能。核心特点 非存储数据结构&…

光子精密双目3D线激光轮廓测量仪,摆脱视觉盲区,1台更比2台强!

光子精密双目3D线激光轮廓测量仪&#xff08;GL-8160D&#xff09;&#xff0c;在GL-8000系列的基础上创新升级。GL-8160D采用全新双目单线设计&#xff0c;突破传统3D视觉检测限制&#xff0c;而且不受外部拼接标定误差影响&#xff0c;有效消除单目盲区&#xff0c;抗光干扰能…

基于Linux驱动的可见光通信方案 —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)

60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门&#xff08;附 BeagleBone Black 及驱动解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的开源可见光通信&#xff08;VLC / Li-Fi&#xff09;研究平台。它把硬件、驱动、协议栈…

Git系列--4.Git分支设计规范

目录 一、了解开发环境 1.1概念阐述 1.2系统概括图 二、设计规范之GitFlow模型 2.1具体分支概念 2.1.1master 分⽀ 2.1.2release 分⽀ 2.1.3develop 分⽀ 2.1.4feature 分⽀ 2.1.5hotfix 分⽀ 2.2宏观表格 三、分支流程图 一、了解开发环境 1.1概念阐述 对于开发人员…

【时间之外】AI在农机配件设计场景的应用

目录 农机制造业痛点 AI场景畅想 落后就要挨打 农机制造业痛点 最近&#xff0c;我与一位在制造业摸爬滚打多年的老友相聚。酒过三巡&#xff0c;话题渐渐转到他的事业上。他兴致勃勃地跟我讲起&#xff0c;自己正主导着一个规模达几千万的项目&#xff0c;生产基地远在孟加…