Java手写插入排序和算法案例拓展
1. Java手写插入排序和算法案例拓展
1.1 算法思维导图
1.2 手写插入排序的必要性
手写插入排序是为了更好地理解算法的原理和实现过程。通过手写插入排序,我们可以深入思考每个步骤的逻辑,优化算法的性能,并且能够更好地应用到实际问题中。
1.3 插入排序的市场调查
插入排序是一种简单直观的排序算法,适用于小规模数据的排序。在实际应用中,插入排序常用于对已经基本有序的数据进行排序,或者用作其他排序算法的优化部分。它的时间复杂度为O(n^2),对于大规模数据的排序效率较低,但在某些特定场景下仍然有较好的应用效果。
1.4 插入排序的详细介绍和步骤
插入排序的基本思想是将待排序的元素依次插入到已排序序列中的合适位置,从而得到一个新的有序序列。具体步骤如下:
- 首先,将待排序序列的第一个元素看作已排序序列,将其作为参照物。
- 然后,从待排序序列的第二个元素开始,依次与已排序序列中的元素进行比较。
- 如果待排序元素小于已排序元素,则将已排序元素后移一位,为待排序元素腾出位置。
- 重复步骤3,直到找到待排序元素的正确位置。
- 将待排序元素插入到正确位置后,已排序序列的长度加1。
- 重复步骤2~5,直到待排序序列中的所有元素都插入到已排序序列中。
下面是插入排序的Java代码实现:
public class InsertionSort {public static void insertionSort(int[] arr) {int n = arr.length;for (int i = 1; i < n; i++) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}}
}
代码解释:
insertionSort
函数接受一个整型数组作为参数,对数组进行插入排序。- 首先,获取数组的长度,并从数组的第二个元素开始遍历。
- 将当前元素保存为
key
,并将j
初始化为当前元素的前一个位置。 - 在
while
循环中,如果j
大于等于0且当前元素大于key
,则将当前元素后移一位。 - 重复上述过程,直到找到当前元素的正确位置。
- 将
key
插入到正确位置后,继续下一个元素的排序。 - 最后,数组中的所有元素都被插入到正确位置,排序完成。
1.5 插入排序的手写实现总结和必要性
通过手写插入排序,我们更深入地理解了算法的原理和实现步骤。手写实现可以帮助我们更好地掌握算法的细节,从而能够优化算法的性能和适应不同的应用场景。同时,手写实现也有助于我们在面试等场合展示自己的编码能力和对算法的理解。
1.6 插入排序的完整代码
public class InsertionSort {public static void insertionSort(int[] arr) {int n = arr.length;for (int i = 1; i < n; i++) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}}public static void main(String[] args) {int[] arr = {5, 2, 8, 9, 1};insertionSort(arr);for (int num : arr) {System.out.print(num + " ");}}
}
1.7 插入排序的应用前景调研
插入排序由于其简单直观的特点,在某些特定场景下仍然有较好的应用前景。以下是插入排序的一些应用前景:
- 对小规模数据进行排序:插入排序在数据规模较小时,由于其时间复杂度为O(n^2),相对于其他高效排序算法(如快速排序、归并排序)来说,性能较好。
- 部分有序数据的排序:对已经基本有序的数据进行排序时,插入排序的性能优于其他排序算法,因为插入排序每次只需要移动少量元素。
- 排序算法的优化部分:插入排序可以作为其他排序算法的优化部分,例如快速排序的优化版本(快速排序+插入排序)。
1.8 插入排序的拓展应用案例
案例1:对学生成绩进行排序
假设有一批学生的成绩数据,需要按照从低到高的顺序进行排序。由于学生人数较少,可以使用插入排序进行排序。
public class Student {private String name;private int score;public Student(String name, int score) {this.name = name;this.score = score;}public String getName() {return name;}public int getScore() {return score;}public static void insertionSort(Student[] students) {int n = students.length;for (int i = 1; i < n; i++) {Student key = students[i];int j = i - 1;while (j >= 0 && students[j].getScore() > key.getScore()) {students[j + 1] = students[j];j--;}students[j + 1] = key;}}public static void main(String[] args) {Student[] students = {new Student("Alice", 80),new Student("Bob", 90),new Student("Charlie", 70)};insertionSort(students);for (Student student : students) {System.out.println(student.getName() + ": " + student.getScore());}}
}
案例2:插入排序的优化
在插入排序中,每次比较都需要进行交换操作,这样会导致大量的数据移动。为了减少数据移动的次数,可以将交换操作改为赋值操作。
public class InsertionSort {public static void insertionSort(int[] arr) {int n = arr.length;for (int i = 1; i < n; i++) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}}public static void insertionSortOptimized(int[] arr) {int n = arr.length;for (int i = 1; i < n; i++) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}}public static void main(String[] args) {int[] arr = {5, 2, 8, 9, 1};insertionSortOptimized(arr);for (int num : arr) {System.out.print(num + " ");}}
}
在优化后的插入排序中,每次比较只需要进行赋值操作,不需要进行交换操作,从而减少了数据移动的次数,提高了排序的效率。
相关文章:
Java手写插入排序和算法案例拓展
1. Java手写插入排序和算法案例拓展 1.1 算法思维导图 #mermaid-svg-jIZ3LAdg1NLcOvaM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jIZ3LAdg1NLcOvaM .error-icon{fill:#552222;}#mermaid-svg-jIZ3LAdg1NLcOvaM…...
Python Opencv实践 - 视频文件操作
参考资料: 视频处理VideoCapture类---OpenCV-Python开发指南(38)_python opencv videocapture_李元静的博客-CSDN博客 OpenCV VideoCapture.get()参数详解 - 简书FOURCC四字符码对照表_4fvcc_Kellybook的博客-CSDN博客 import cv2 as cv im…...
HCS 中的一些概念(二)
一、Service OM 1、首页(资源状态) 2、服务列表 计算资源:计算资源又分为可用分区(AZ)、规格和虚拟机组,可在此处创建虚拟机、虚拟机组、主机组和规格 网络资源:网络资源又分为物理网络…...
Scanner类用法(学习笔记)
Scanner类用法(学习笔记,后续会补充) 1.next()用法 package com.yushifu.scanner; import java.util.Scanner;//util java工具包 //Scanner类(获取用户的输入) Scanner s new Scanner&#…...
idea2021.1.3版本双击启动,没反应
今天打开电脑,点开idea,界面悬在这里,几秒然后就是没了。然后就一直打不开idea了。 然后又是卸载重装,又是删除缓存文件。我把电脑关于idea的文件全都删除了 。重新安装后(首次运行倒是可以打开,但是关掉id…...
MC-4/11/01/400 ELAU 软件允许用户完全访问相机设置
MC-4/11/01/400 ELAU 软件允许用户完全访问相机设置 一个完整的Sentinel模具保护解决方案包括一到四台冲击式摄像机、专用红外LED照明和镜头、Sentinel软件以及所有与模压机连接的必要互连组件。摄像机支架基于磁性,可快速、安全、灵活地部署。此外,一个…...
Error contacting service. It is probably not running.问题解决
一 问题描述 Error contacting service. It is probably not running. 查看zookeeper 目录下数据目录下的zookeeper.out 如果你没找到这个目录那么 OK 你的问题就是 zoo.cfg 文件中数据目录设置错误 zookeeper.out下报错 ERROR [main:QuorumPeerMain86] - Invalid config,…...
01_网络编程_传统IO
网络编程 1.什么是网络编程 在网络通信协议下,不同计算机上运行的程序,进行的数据传输。 如果想把一个计算的结果,或者是电脑上的文件通过网络传递给你的朋友,就需要用到网络编程。 在实际生活中,网络通信无处不在…...
vue 检查指定路由是否存在
今天路由跳转报错了 RangeError: Maximum call stack size exceeded 但显然 我的代码只有一个简单的路由跳转 并没有很大的的堆栈数据操作 所以 我就联想到了 会不会是因为路由不存在 我们可以通过 console.log(this.$router.options.routes)输出整个路由对象类看一下 或者…...
自动化办公更简单了:新版python-office,有哪些更新?
#职场经验谈# 大家好,这里是程序员晚枫,小破站/小红薯都叫这个名。 去年4月开源了一个Python自动化办公项目:python-office,GitHub和Gitee都能看到。1行代码实现复杂的自动化办公任务,帮助不懂代码的小白,…...
windows flask服务卡死的问题
windows flask服务卡死的问题 最近的工作中,需要用python写一个flask服务,供C端调用,但是偶尔服务会卡住,只接收数据但不进行处理,不过CtrlC后又可以继续运行。 查看了网上的一些解决方法,但似乎都没有什…...
项目上线部署--》服务器部署流程(一)
目录 🌟准备工作 服务器购买 域名购买 域名解析(配置 DNS) 🌟服务器环境搭建 配置服务器 安装 CentOS 开发人员相关包 编辑 配置免密登陆 🌟写在最后 🌟准备工作 服务器购买 国内服务器&#x…...
Python:函数调用的实参
相关阅读 Python专栏https://blog.csdn.net/weixin_45791458/category_12403403.html 调用就是附带可能为空的一系列参数来执行一个可调用对象 (例如函数),它的语法的BNF范式如下所示,有关BNF范式的规则,可以参考之前…...
174. 地下城游戏 -- 动规
174. 地下城游戏 class CalculateMinimumHP:"""174. 地下城游戏https://leetcode.cn/problems/dungeon-game/"""def solution(self, dungeon: List[List[int]]) -> int:# 我们想计算左上⻆到右下⻆所需的最⼩⽣命值m, n len(dungeon), len(d…...
js实现websocket服务端和客户端
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
qt qml RadioButton如何设置字体颜色,style提示找不到怎么办?
qt QML中设置RadioButton的字体颜色,可以使用RadioButton的label属性来设置文本的样式。下面是一个示例代码: import QtQuick 2.6 import QtQuick.Controls 2.2 import QtQuick.Controls 1.4 as Controls1_4 import QtQuick.Controls.Styles 1.4 import…...
Docker 的使用
一、Docker 的作用和优势 软件集装箱化平台,可让开发者构建应用程序时,将它与环境一起打包到一个容器中,发布应用到任意平台中。 能在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用, 如&am…...
【无公网IP内网穿透】Java支付宝沙箱环境支付,SDK接口远程调试
目录 1.测试环境 2.本地配置 3. 内网穿透 3.1 下载安装cpolar内网穿透 3.2 创建隧道 4. 测试公网访问 5. 配置固定二级子域名 5.1 保留一个二级子域名 5.2 配置二级子域名 6. 使用固定二级子域名进行访问 1.测试环境 MavenSpring bootJdk 1.8 2.本地配置 获取支付…...
axios 用formData的方式请求数据
需求:使用axios库用来做http数据传输。 问题:传递数据的时候不是直接通过json的方式来传输的数据,二是通过formData的方式 解决: axios 请求头设置,Content-Type "Content-Type": "application/x-w…...
Mapbox加载arcgis的底图
成果图 这种底图基本上都是按照raster来加载的,主要就是知道地址了,拼参数 具体参数请参考官网 https://developers.arcgis.com/rest/services-reference/enterprise/export-map.htm 源码 我的服务列表是这样的 http://XXXX:XXXX/arcgis/rest/services/…...
(20)线程安全问题:Lock,双锁问题,Monitor,死锁
一、Lock 1、用多线程给变量自增,10000个线程自增 List<Task> tasks new List<Task>();int AsyncNum 0;for (int i 0; i < 10000; i){tasks.Add(Task.Run(() >{AsyncNum;}));}Task.WaitAll(tasks.ToArray());Console.WriteLine($"AsyncNu…...
医院如何实现安全又稳定的跨网文件数据交换呢?
随着医疗信息化的发展,医院之间需要频繁地进行文件数据交换,以实现诊疗、科研、管理等方面的协同和共享。然而,由于医院网络环境的复杂性和敏感性,跨网文件数据交换面临着安全性和稳定性的双重挑战。如何在保证文件数据不被泄露、…...
关于老项目从JDK8升级到JDK17所需要注意的细节
文章目录 ☀️1.关于老项目从JDK8升级到JDK17所需要注意的细节🌸1.1.更新JDK🌸1.2.修改Idea中的JDK版本🌸1.3.关于修改过程中遇到的异常🌸1.4.IDEA工具栏操作Maven正常,但使用mvn命令运行就报错 ☀️1.关于老项目从JDK…...
《C++ primer》练习3.43-3.45: 打印二维数组的元素
文章目录 1. 使用范围for循环2. 使用普通for循环2.1 使用指针2.2 使用数组下标 类型别名的简化 本文来自于《C primer》的练习3.43-3.45,觉得多维数组的遍历有不同的实现方式,于是记录一下。写的可能没有按题目的顺序来。题目大概含义是定义了一个二维数…...
使用电力系统稳定器 (PSS) 和静态 VAR 补偿器 (SVC) 提高瞬态稳定性(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
开源项目-SeaTunnel-UI数据集成系统
哈喽,大家好,今天给大家带来一个开源项目-SeaTunnel-UI数据集成系统 系统主要有任务配置,任务实例,数据源,虚拟表,用户管理等功能 登录 数据源 mysql数据源配置参数说明 kafka参数配置 mysqlcdc配置参数说明 虚拟表...
百度SEO优化策略与经验分享(提升百度排名的8大步骤)
百度关键词优化策略介绍:蘑菇号https://www.mooogu.cn/ 百度搜索引擎优化,简称为百度SEO,是一种通过优化网站结构和内容,提高网站在百度搜索引擎中的排名,从而获得更多有价值的流量和销售机会的行业术语。百度SEO的核…...
【深度学习】- NLP系列文章之 1.文本表示以及mlp来处理分类问题
系列文章目录 1. 文本分类与词嵌入表示,mlp来处理分类问题 2. RNN、LSTM、GRU三种方式处理文本分类问题 3. 评论情绪分类 还是得开个坑,最近搞论文,使用lstm做的ssd的cache prefetching,意味着我不能再划水了。 文章目录 系列文章…...
力扣236 补9.14
做不来,我做中等题基本上都是没有思路,这里需要先遍历祖先节点,那必然用先序遍历,这题还是官方题解容易理解,第二火的题解反而把我弄得脑袋昏昏的。 class Solution { TreeNode ans; public TreeNode lowestCommonAnce…...
一文搞定Postman(菜鸟必看)
什么是Postman? Postman是一个可扩展的 API 测试工具,可以快速集成到 CI/CD 管道中。它于 2012 年作为 Abhinav Asthana 的一个副项目启动,旨在简化测试和开发中的 API 工作流程。API 代表应用程序编程接口,它允许软件应用程序通…...
做网站的价位/百度搜索引擎优化详解
可以访问 查看更多关于 消息中间件 的原创文章。移山是禧云自研的数据迁移平台,包含异构数据源的迁移、实时数据同步等服务。有兴趣的可以看这里:本文主要介绍移山实时数据同步服务产生的背景以及整体架构设计。可以访问一. 移山实时数据同步服务产生背…...
黔江城乡建设委员会的网站/网站seo推广招聘
data与el的2种写法 1.el有2种写法 (1).new Vue时候配置el属性。 new Vue({el:#root, //第一种写法data:{name:尚硅谷}})(2).先创建Vue实例,随后再通过vm.$mount(#root)指定el的值。 const v new Vue({data:{name:尚硅谷} })console.log(v) v.$mount(#root) //第…...
杭州网站开发响应式/手机网站制作教程
木马检测技术旨在验证所设计或者制造的芯片是否感染了硬件木马。 目录 一、流片前检测 1.1 功能验证 1.2 电路设计分析 1.3 形式化验证 二、流片后检测 2.1 破坏性检测方法 2.2 非破坏性检测方法 2.2.1 非破坏性逆向工程 2.2.2 逻辑测试 2.2.3 侧信道分析 主要在两个…...
黄骅市领导班子最新调整/百度seo招聘
Java Enum原理 public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 实际上,这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要构造新对象。 因此,在比较两个枚举类型的值时,永远不需要调用equals方法&…...
1如何做网站推广/html静态网页制作
10月10日,复旦大学Google Camp正式成立,李开复教授在成立仪式上发表了《21世纪所需要的7种人才》演讲,并回答了复旦同学7个“犀利”的问题,我们将在近期依次整理出这7个问答。一.开复如何评价谷歌的竞争对手——百度。复旦同学&am…...
html5网站管理系统/友情链接怎么交换
除了软件开发套件和工具,我们为开发人员提供了其它产品,以充分利用基于 PowerVR 的设备。今天,我们将重点介绍PVRTune完全版一些新功能。PVRTune 是软件开发套件中最具价值的产品之一,如果您还不了解它,欢迎阅读本篇文…...