基础算法(3):排序(3)插入排序

1.插入排序实现

     插入排序的工作原理是:通过构建有序序列,对于未排序数据,在已经排序的序列从后向前扫描,找到位置并插入,类似于平时打扑克牌时,将牌从大到小排列,每次摸到一张牌就插入到正确的位置。

     实现逻辑:

  (1)从第一个元素出现,该元素认为已经被排好序

  (2)取出下一个元素,在已经排序的序列中从后向前扫描

    (3)如果扫描到某个元素大于取出的新元素,将该元素移到下一个位置

  (4)重复(3),直到找到已排序的元素小于或者等于新元素的位置

  (5)将新元素插入到该位置后面

  (6)重复(2)-(5)

     代码实现:

void insertSort(int* arr,int len)
{for(int i=i;i<len;i++){int cur=arr[i];int j=i-1;while(j>=0&&arr[j]>cur){arr[j+1]=arr[j];j--;}arr[j+1]=cur;}
}

2.插入排序的时间复杂度

     问题规模仍然为n,最好情况是序列是升序,这样只需要比较n-1次,最坏情况是序列是降序,需要比较n(n-1)次,所以时间复杂度为O(n^2)

3.leetcode题目

3.1 删除某些元素后的数组均值

void insertionSort(int *a ,int n){int i,j;int tmp ;for(i = 1; i < n; ++i){for(j = i - 1; j>=0; --j){if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp; }}}
}
double trimMean(int* arr, int arrSize){insertionSort(arr,arrSize);int cnt = arrSize / 20;double count = 0;for(int i = cnt; i < arrSize - cnt; ++i){count += arr[i];}return count /  (arrSize - 2*cnt);
}

3.2  去掉最低工资和最高工资后的工资平均值

double average(int* salary,int salarySize){for (int i = 1; i < salarySize; i++) {int tmp = salary[i];int j = i - 1;for (; j >= 0 && tmp < salary[j]; j--) {salary[j + 1] = salary[j];}salary[j + 1] = tmp;}double ans=0;for(int i=1;i<salarySize-1;i++){ans+=salary[i];}return ans/(salarySize-2); 
}

3.3 学生分数的最小差值

int minimumDifference(int* nums, int numsSize, int k) {for (int i = 1; i < numsSize; i++){int tmp = nums[i];int j = i - 1;for (; j >= 0 && tmp < nums[j]; j--) {nums[j + 1] = nums[j];}nums[j + 1] = tmp;}int ret=100000;for(int i=0;i+k-1<numsSize;i++){int ans=nums[i+k-1]-nums[i];if(ans<ret){ret=ans;}}return ret;
}

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

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

相关文章

12.4~12.14概率论复习与相应理解(学习、复习、备考概率论,这一篇就够了)

未分配的题目 概率计算&#xff08;一些转换公式与全概率公式&#xff09;与实际概率 &#xff0c;贝叶斯 一些转换公式 相关性质计算 常规&#xff0c;公式的COV与P 复习相关公式 计算出新表达式的均值&#xff0c;方差&#xff0c;再套正态分布的公式 COV的运算性质 如…

前后端项目,nginx部署前端项目后刷新浏览器报错404的问题

问题&#xff1a; Vue单页应用项目打包部署Nginx服务器后&#xff0c;刷新页面后&#xff0c;出现404。 原因&#xff1a; 加载单页应用后路由改变均由浏览器处理&#xff0c;而刷新时将会请求当前的链接&#xff0c;而Nginx无法找到对应的页面。 解决&#xff1a; 在Nginx配…

python爬虫学习-批量爬取图片

python爬虫学习-批量爬取图片 爬虫步骤爬取前十页图片到本地根据页码获取网络源码使用xpath解析网页解析网页并下载图片主函数如下 爬取的网站为站长素材&#xff08;仅做学习使用&#xff09; 爬取的目标网站为 https://sc.chinaz.com/tupian/qinglvtupian.html如果爬取多页&…

大数据讲课笔记1.2 Linux用户操作

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;用户账号管理1、用户与用户组文件2、用户账号管理工作 &#xff08;二&#xff09;用户操作1、切换用户&#xff08;1&#xff09;语法格式&#xff08;2&#xff09;切换到普通用户&#xff08;3&…

NVH软件导入音频文件

我们经常会遇到一种情况是&#xff1a;车主上下班路上经常会听到一个异响&#xff0c;但车交到我们手上&#xff0c;我们怎么在外面去试车&#xff0c;都听不到这个异响&#xff0c;或者条件达不到重现不了这个异响。如果是这样&#xff0c;我们是不是有点崩溃&#xff1f;但&a…

零基础学员制作的Python速成学习计划

学习目标&#xff1a; 掌握Python的基本语法能够编写简单的Python程序理解Python的数据类型和数据结构掌握条件判断、循环等控制结构了解函数和模块的概念 学习时间&#xff1a; 预计学习时间为1-2个月&#xff0c;每天至少学习1小时。 学习计划&#xff1a; 第1周&#x…

jstree组件的使用详细教程,部分案例( PHP / fastAdmin )

jstree 组件的使用。 简介&#xff1a;JsTree是一个jquery的插件&#xff0c;它提交一个非常友好并且强大的交互性的树&#xff0c;并且是完全免费或开源的&#xff08;MIT 许可&#xff09;。Jstree技持Html 或 json格式的的数据&#xff0c; 或者是ajax方式的动态请求加载数…

公司团队规范研发流程概要

一、背景 ● 背景&#xff1a;XXX研发部门开发流程步骤以及开发工具&#xff0c;依赖版本&#xff0c;开发规范等相关信息。 ● 技术定位&#xff1a;All。 ● 目标群体&#xff1a;所有相关研发部门技术人员。 二、操作步骤 2.1 开发前的准备 准备工作一 开发相关账号开通…

中职网络安全应急响应—Server2228

应急响应 任务环境说明: 服务器场景:Server2228(开放链接) 用户名:root,密码:p@ssw0rd123 1. 找出被黑客修改的系统别名,并将倒数第二个别名作为Flag值提交; 通过用户名和密码登录系统 在 Linux 中,利用 “alias” 命令去查看当前系统中定义的所有别名 flag:ss …

软实力篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、必知必会的几点二、必须了解的两大法则三、项目经历怎么写前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、必知必…

Echarts饼图中显示百分比

开发中遇到一个需求&#xff0c;要在饼图上显示数据百分比&#xff0c;下图&#xff1a; 查了echarts 文档&#xff0c;并不能通过简单的配置来实现&#xff0c;原因如下&#xff1a;在单个serie的label中&#xff0c;只能设置一个label&#xff0c;位置可以选择在饼图内部inne…

gitk查看被删除的单个文件的所有历史记录

可以使用 Git 自带的图形用户界面工具 Gitk 来查看文件的历史记录。以下是使用 Gitk 查看文件历史记录的步骤&#xff1a; 打开终端&#xff08;或命令提示符&#xff09;。 进入你的 Git 仓库所在的目录。 运行以下命令&#xff1a; gitk -- <path/to/your/file>请将…

在线监控网址源码/ 网站监控工具源码/ 网站监控系统源码/定时任务/网站网址URL状态监控神器

源码介绍&#xff1a; 在线监控网址源码、 网站监控工具源码&#xff0c;它作为网站监控系统源码&#xff0c;有定时任务&#xff0c;支持卡密充值&#xff0c;是网站网址URL状态监控神器。让数据库监控更加简单和专业。远程云中监控、实时邮件告警、丰富的指标和图表、分析和…

DVPP媒体数据处理视频解码问题案例(2)

DVPP&#xff08;Digital Vision Pre-Processing&#xff09;是昇腾AI处理器内置的图像处理单元&#xff0c;通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力&#xff0c;主要功能包括图像编解码、视频编解码、图像抠图缩放等。 往期分享过几个DVPP视频解码问题的典…

Vue学习笔记-Vue3中的Teleport组件

作用 该组件的作用一般用于CSS样式&#xff0c;Teleport能够将写在其中的组件传输到指定位置 使用示范 <!--to中的属性值可以写css选择器&#xff0c;例如 to"#idName"--> <teleport to"body"><div><h3>我是一个弹窗</h3>…

docker配置容器内访问主机服务

当我们在Docker容器中运行应用程序时&#xff0c;有时候需要访问宿主机的IP地址。然而&#xff0c;默认情况下&#xff0c;Docker容器内无法直接使用宿主机的IP地址。为了解决这个问题&#xff0c;Docker提供了一个特殊的主机名 host.docker.internal&#xff0c;使得容器可以轻…

facebook的营销方式

Facebook现在有很多种营销方式&#xff0c;以下是一些常见的方式&#xff1a; 1. 广告投放&#xff1a;可以通过Facebook广告平台进行广告投放&#xff0c;根据不同的目标人群、地理位置和兴趣进行精准定向投放&#xff0c;包括图片广告、视频广告和文字广告等。 2. 社群营销…

【教学类-06-17】20231215 (题目填满55格)X-Y之间“加法题+题”

背景需求&#xff1a; 0-5加法、减法是大班孩子选择较多的题型&#xff0c;因为只有21题&#xff0c;做题速度快&#xff0c;完成后&#xff0c;&#xff0c;他们会问&#xff1a;“后面的空白格子做什么” “可以画画&#xff0c;自己出题目” 但是大部分孩子都不会自己出题目…

【导航栏内容的设置 Objective-C语言】

一、那接下来呢,我们就来做一做,关于导航控制器, 1.设置它顶部的导航栏儿内容的东西, 1)我们刚刚讲过的这个,通过代码去跳转、返回、 2)通过storyboard去跳转、返回、 但是,这两种情况,大家是不是已经注意到,导航栏里面,没有任何内容, 然后呢,返回,这是红色,…