java数据结构之直接插入排序

用VASP计算GW+BSE VASP在5.3以后的版本都能用解BSE方程的方法,在计算光吸收的过程中考虑激子效应。 下面就来写一个用BSE计算bulkSi的例子 首先,介电函数的计算是在GW计算的基础之上的。这里首先介绍G0W0的计算(我们这里直接在PBE的波函数基础上进行G0W0计算)。 1.PBE自恰计算,写WAVECAR System= Silicon groundstate occupied 阅读详情

        直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增 1 的有序表。

在日常生活中,经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。例如:一组从小到大排好顺序的数据列 {1,2,3,4,5,6,7,9,10},通常称之为有序列,我们用序号 1,2,3,… 表示数据的位置,欲把一个新的数据 8 插入到上述序列中。

完成这个工作的步骤:

①确定数据 “8” 在原有序列中应该占有的位置序号。数据 “8” 所处的位置应满足小于或等于该位置右边所有的数据,大于其左边位置上所有的数据。

②将这个位置空出来,将数据 “8” 插进去。

直接插入排序 (straight insertion sort) 的做法是:

每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。

第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了 (n-1) 趟扫描以后就完成了整个排序过程。

直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。

基本思想

每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。 [1] 

待排序记录 R1,R2,… ,Rn–1, Rn

第一步:R1

第二步:(R1), R2

第三步:(R1 , R2), R3

……

第 j 步:(R1,R2,… ,Rj–1), Rj

……

第 n 步: (R1,R2,… ,Rn–1), Rn.

例:j=5

原有序表中关键词比 Rj 大的记录数:dj

比较次数:dj+1 移动次数: dj+2

算法思想

算法 InsertSort (R,n)

FOR j=2 TO n DO

( // 每次将 Rj 插入到有序表 R1,…,Rj–1 中

K←Kj. R←Rj. i←j-1.

WHILE (i>0) AND (Ki>K) DO

(Ri+1←Ri.

i←i-1.)

Ri+1←R.

)

算法 InsertSortA(R, s, e)

// 引入虚拟记录, Ks-1≤min{Ki| s≤i≤e}

ISA1 [逐一排序]

FOR j=s+1 TO e DO

( i←j-1.K←Kj. R←Rj .

WHILE K<Ki DO

( Ri+1←Ri .

i←i-1 .)

Ri+1←R .

)

ISA1 [逐一排序]

FOR j=s+1 TO e DO

( i←j-1.K←Kj . R←Rj .

WHILE K<Ki DO

(Ri+1←Ri .i←i-l) .

Ri+1←R )

直接插入排序的时间复杂度为 O(n2)。

排序方法

1.简单方法

首先在当前有序区 R[1..i-1] 中查找 R[i] 的正确插入位置 k(1≤k≤i-1);然后将 R[k..i-1] 中的记录均后移一个位置,腾出 k 位置上的空间插入 R[i]。

注意:若 R[i] 的关键字大于等于 R[1..i-1] 中所有记录的关键字,则 R[i] 就是插入原位置。

2.改进的方法

一种查找比较操作和记录移动操作交替地进行的方法。具体做法:

将待插入记录 R[i] 的关键字从右向左依次与有序区中记录 R[j](j=i-1,i-2,…,1) 的关键字进行比较:

① 若 R[j] 的关键字大于 R[i] 的关键字,则将 R[j] 后移一个位置;

②若 R[j] 的关键字小于或等于 R[i] 的关键字,则查找过程结束,j+1 即为 R[i] 的插入位置。

关键字比 R[i] 的关键字大的记录均已后移,所以 j+1 的位置已经腾空,只要将 R[i] 直接插入此位置即可完成一趟直接插入排序。

哨兵的作用

算法中引进的附加记录 R[0] 称监视哨或哨兵 (Sentinel)。

哨兵有两个作用:

① 进人查找 (插入位置) 循环之前,它保存了 R[i]的副本,使不致于因记录后移而丢失 R[i]的内容;

② 它的主要作用是:在查找循环中 "监视" 下标变量 j 是否越界。一旦越界 (即 j=0),因为 R[0]. 可以和自己比较,循环判定条件不成立使得查找循环结束,从而避免了在该循环内的每一次均要检测 j 是否越界 (即省略了循环判定条件"j>=1")。

注意:

① 实际上,一切为简化边界条件而引入的附加结点 (元素) 均可称为哨兵。

【例】单链表中的头结点实际上是一个哨兵

② 引入哨兵后使得测试查找循环条件的时间大约减少了一半,所以对于记录数较大的文件节约的时间就相当可观。对于类似于排序这样使用频率非常高的算法,要尽可能地减少其运行时间。所以不能把上述算法中的哨兵视为雕虫小技,而应该深刻理解并掌握这种技巧。

过程实例

例:

原有序表:(9 15 23 28 37) 20

找插入位置 : (9 15 ^ 23 28 37) 20

新有序表: (9 15 20 23 28 37)

java代码如下:

package 数据结构;

public class zhijiecharupaixu {
   public static void sort(long arr[]){
	   long tep;
	   for(int i=1;i<arr.length;i++){//注意是从1开始
		   tep=arr[i];//把每一轮循环arr[i]的值赋给tep,用来进行比较
		   int k=i;
		   while(k>0 && arr[k-1]>tep){//当选择的arr[i]的前面有比它大的数的时候,把那个位置的数向后移一位,然后一次循环之后将这个小的插到空出的位置
			   
			   arr[k]=arr[k-1];
		   k=k-1;
		   }
		   arr[k]=tep;
   }
}
}

测试:

package 数据结构;

public class Testzhijiecharupaixu {
  public static void main(String args[]){
	  long arr[]=new long[6];
	     arr[0]=2;
	     arr[1]=1;
	     arr[2]=5;
	     arr[3]=3;
	     arr[4]=8;
	     arr[5]=0;
	    zhijiecharupaixu.sort(arr);
	     for(int i=0;i<arr.length;i++){
	    	 System.out.println(arr[i]);
	     }
  }
}

输出结果如下:

好啦,这次就到这里啦,有问题可以和我留言哦!

邮箱:2321591758@qq.com

其他博客的链接:

Github个人网站      知乎      简书

欢迎各位访问哦,这次就到这里啦!

MacOS下微信小程序源码提取与逆向实战:从找到.wxapkg到完整还原 本文详细介绍了在MacOS系统下进行微信小程序源码提取与逆向分析的完整实战流程。从定位沙盒机制中的.wxapkg缓存文件,到搭建Node.js环境与配置wxappUnpacker工具链,再到执行核心反编译命令并处理分包等复杂情况,提供了清晰的操作步骤。文章还汇总了Node版本、依赖缺失、文件乱码等常见问题的解决方案,旨在帮助开发者、安全研究人员高效完成小程序安全审计与学习。 阅读详情

相关推荐

基于 OptiSystem 的掺铒光纤放大器(EDFA)分析

通过构建 EDFA 仿真模型,系统分析了铒离子掺杂半径、离子浓度、光纤长度及泵浦功率等关键参数对放大器增益和噪声特性的影响规律,为 EDFA 的优化设计提供了理论依据与仿真支撑。继续增大至 9μm,增益趋于稳定(约 19dB)。继续增加至 200mW,增益仅增加 2dB,表明泵浦功率存在阈值效应(约 100mW),超过后增益饱和明显。:作为增益介质,主要参数包括光纤长度(5~50m)、铒离子掺杂半径(1~10μm)、离子浓度(1×10²⁵~5×10²⁵m⁻³)、纤芯半径 2.2μm、数值孔径 0.24。

2501_91855190的博客 2676

java直接排序算法_经典(java版)排序算法的分析及实现之一直接插入排序

预备知识排序算法从功能上是对一个数据元素集合或序列重新排列成一个按数据元素某个相知有序的序列。从内存空间使用简单上看分为内部排序和外部排序。内部排序是数据记录在内存中进行排序,适合不太大的元素序列。而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 排序算法稳定性是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。比如:Ai=A...

weixin_42465297的博客 328

零成本实现飞牛 OS 内网穿透:CloudFlare 隧道搭建全攻略

一、引言:突破内网限制的最优解当你的内网环境中部署了飞牛 OS 系统(无论是老旧电脑还是 NAS 设备),想要实现公网访问时,传统方案往往面临两大痛点:公网 IP 申请困难且成本高DDNS 动态解析配置复杂专业内网穿透工具存在付费门槛今天为大家带来零成本解决方案:通过免费域名搭配 CloudFlare 隧道技术,无需公网 IP 即可轻松实现飞牛 OS 服务的公网访问。全程操作可视化,新手也能快速上手!二、前期准备:必备工具清单(1)域名准备。

Honmaple的博客 7491

Java数据结构-插入排序

数据结构-插入排序

vintind的博客 132

MFC 修改CheckBox的文本颜色方法

设置主题 这一步是必须的,不可省略。 BOOL CMFCApplication1Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 设置主题 HWND

Kim的博客 2249

QGroundControl高级配置与自定义功能实战指南

本文深入探讨了QGroundControl(QGC)的高级配置与自定义功能,为无人机开发者、系统集成商和高级用户提供实战指南。内容涵盖从品牌界面定制、自定义MAVLink消息处理,到插件开发与自动化部署的全流程,旨在帮助用户解锁QGC的隐藏潜力,打造专属的行业解决方案。

weixin_29234509的博客 239

数据结构八大排序算法之直接插入排序(Java实现)

第二次更新 基本思想: 把数组分成两个部分,一部分是已排序的,另一部分是未排序的。 从第二个元素开始(因为开始的时候第一部分只有一个元素,已经是排好序的,也就是默认第一个元素在第一部分,其他元素在第二部分)把所有元素依次插入到第一部分中。 具体行为就是把第二部分中的每一个元素和第一部分中的元素依次比较,假设按升序排列,当待排序元素(第二部分)大于比较元素(第一部分)时就进行下一次比较,和第...

人生短短几个秋的博客 421

python模拟银行交易流水

模拟自动生成银行交易流水,其中包括:入账账号、出账账号、交易金额、交易余额、交易时间、出入表示关键字段

qq_31823889的博客 2910

JAVA数据结构和算法-简单排序之插入排序

解析 在大多数情况下,插入排序算法是之前所指出的JAVA数据结构和算法-简单排序之冒泡排序和 JAVA数据结构和算法-简单排序之选择排序 算法中最好和效率最高的一种。虽然插入排序算法仍然需要O(n的平方)的时间,但是在一般情况下,它要比冒泡排序快一倍,比选择排序还要快一点。尽管它比冒泡排序算法和选择排序算法都更麻烦一些,但它也并不很复杂。它经常被用在较复杂的排序算法的最后阶段,例如快速排序。 插入排序为棒球队员排序 开始插入排序之前,把棒球队员按随机顺序排成一行。(他们可能着急想打球,但是现在显然没有时间

不吃_花椒的博客 417

基于STM32+Qt上位机设计的智慧停车场管理系统(207)

本项目设计了一套基于STM32+Qt上位机的智慧停车场管理系统。该系统融合了先进的嵌入式技术、图像识别技术、数据库技术和移动互联网技术,通过STM32硬件端实时采集车库现场信息,包括车牌识别、车位占用状态监测等,并将数据上传至Qt上位机进行处理与展示。利用MySQL数据库存储车辆出入库记录及车位使用情况,确保数据的安全性和可追溯性;通过Android手机APP为用户提供查询、支付等功能,实现远程交互与便捷服务。

3942

LVGL 9Text Area 控件 (lv_textarea) 使用指南

是一个可编辑的文本输入控件,通常用于在用户界面中输入和编辑多行或单行文本。该控件支持文本插入、删除、光标控制、文本选择、密码输入等功能。它的文本内容可以通过键盘、API 或事件进行修改,还可以设置最大文本长度、占位符文本和密码模式等。是一个强大且灵活的文本输入控件,适用于多种用户输入场景,支持文本插入、删除、光标控制、密码输入等功能。通过 LittlevGL 提供的丰富 API,开发者可以自定义文本区域的外观和行为,实现复杂的文本输入需求。

m0_62599305的博客 1673

数据结构排序算法(直接插入排序附java代码)

插入排序: 1)直接插入排序: 理解:假设有n个数需要排序,则第一个数已经排序,剩下的n-1个数没有排序,现在需要将剩下的n-1个数,一个一个找到合适的位置插入进去。 第一趟排序结束:得到已经排序的数字的个数是2,再加上剩下的n-2个数字 例如:待排序序列(49,38,65,97,76,13,27,49),第一趟排序结束(38 49 65 97 76 13 27 49) 直接插入排序实...

sunqingying123456的博客 612

用Virtuoso和Abstract完成gds2lef

需要用到的工具有virtuoso和abstract。 数模混合的项目通常需要模拟完成模块设计,把接去数字的pin打上label(text),数字的floorplan才能正式开始。 如果只需要简单的数字PR boundary和pin点位置,那么只使用virtuoso就够了,还想把模拟版图都转成lef就要用到abstract工具。 1.PR boundary+pin 1)在virtuoso中打开layout a) Gui操作: Create->P&R Objects->

m0_61544122的博客 8738

Java数据结构之《直接插入排序》(难度系数75)

这是怀化学院的:Java数据结构中的一道难度中等的一道编程题《直接插入排序》。利用直接插入排序算法实现线性表的排序。要求输出第k趟排序的结果。例如原来线性表为:26,12,25,4,36,15,21,第一趟直接排序排序结果为: 12, 26,25,4,36,15,21,第二趟直接插入排序结果为: 12,25, 26,4,36,15,21。输入第一个为元素个数n(1

岁岁岁平安的博客 756

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java数据结构与算法——直接插入排序

排序算法插入排序 插入排序 一个序列中只有1个元素那它一定是有序的 取原序列第一个元素作为子序列,这个子序列一定是有序的 取出原序列第二个元素赋值给哨兵,将哨兵的值与子序列最后一个元素进行比较 如果子序列最后一个元素大于哨兵的值,将子序列扩大一位,将子序列最后一个元素后移一位 循环遍历哨兵与子序列前一位的值的大小,直到当前值小于哨兵的值,就将哨兵的值放在子序列当前下...

HU的博客 240

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java【数据结构】—— 冒泡排序、选择排序、直接插入排序

Java实现冒泡排序、选择排序、直接插入排序

qq_59599094的博客 1264

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据结构java版排序代码_数据结构排序算法(直接插入排序附java代码)

插入排序:1)直接插入排序:理解:假设有n个数需要排序,则第一个数已经排序,剩下的n-1个数没有排序,现在需要将剩下的n-1个数,一个一个找到合适的位置插入进去。第一趟排序结束:得到已经排序的数字的个数是2,再加上剩下的n-2个数字例如:待排序序列(49,38,65,97,76,13,27,49),第一趟排序结束(38 49 65 97 76 13 27 49)直接插入排序实现java代码如下:...

weixin_29001655的博客 172

【数据结构】-直接插入排序、希尔排序Java实现

直接插入排序:将一个记录插入到已排好的有序序列中,从而得到新的、记录数加1的有序序列。 稳定性:稳定; 时间复杂度:O(n*n)希尔排序:先将整个待排记录分成若干子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。 稳定性:不稳定; 时间复杂度:O(nlogn)~O(n*n)package org.iti.algorithm;import java.u

小飞飞的专栏 581

数据结构:直接插入排序详解,java代码实现

【代码】数据结构:直接插入排序详解,java代码实现。

da_dou_dou的博客 394

数据结构之直接插入排序的java实现

插入排序:每个元素插入到已经有序的集合中的过程 1.实现与测试 public class InsertSort { public static void main(String[] args){ int[] a = {3,4,6,1,2,9,8,0,5,7}; System.out.println(Arrays.toString(insertSort...

欣淡定的博客 164

数据结构——插入排序(直接插入排序,希尔排序java)

一.直接插入排序: 1、基本思想 直接插入排序的基本操作是将一个记录插入到已经排好的有序表中,从而得到一个新的、记录数增1的有序表。对于给定的一组记录,初始时假定第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直到最后一个记录插到有序序列中为止。 2、复杂度分析 当最好的情况,也就是要排序的表本身就是有序的,...

wind_cp的博客 586

[数据结构与算法]10 直接插入排序( Java 版)

直接插入排序,当你看到这几个字的时候,首先第一想法是什么?

自由而不独立,仍是奴隶。 518

Java数据结构-直接插入排序

插入思想: 把n个待排序的元素看成一个有序表和一个无序表 开始时有序表中只有一个元素,无序表中有n-1个元素 排序过程中每次从无序表中取出第一个元素,依次和有序表中的元素比较,将他插入到合适的位置 思路图: 代码1-分解步骤: public class InsertSort { public static void main(String[] args) { int[] arr={101,34,119,1}; insertSort(arr); } //插入排序 public static vo

234

Java 数据结构与算法 直接插入排序、希尔排序、直接选择排序和堆排序

介绍了排序中的插入类排序和选择类排序,有直接插入排序、希尔排序、直接选择排序和堆排序。

Naion的博客 382

Java实现数据结构----插入排序直接插入排序

七大基于比较的排序之插入排序-直接排序 直接插入排序-原理 主要步骤: 1.先假设第一个元素已经排好序 2.然后依次取出还需要进行排序的下一个元素,也就是排序完成的元素后面的下一个元素,取出下一个元素,设为待插入元素,在已经排序的元素序列中从后向前扫描,如果该元素(已排序)大于待插入元素,将该元素移到下一位置。 3.重复步骤2,直到找到已排序的元素小于或者等于待排序元素的位置,插入元素 4. 重复2,3的步骤,完成排序。 这样说可能还是有很多人不理解,那就画图来说明一下吧: 实现 性能分析 折半插入排

m0_56642224的博客 1847

数据结构之直接插入排序与折半插入排序(java实现)

一、直接插入排序思想与过程        定义:        直接插入排序时一种最简单的排序方法,其基本操作是将一条记录插入到已排好序的有序表中,从而得到一个新的、记录数量增1的有序表        算法步骤:        1、待排序序列存放在数组r[1.....n]中        2、循环n-1次,从r[2]开始,直至r[n]结束,每次使用顺序查找法,查找r[i]在r[1....i-1]有...

江南V的博客 395
上一篇: java数据结构之选择排序
下一篇: java数据结构之希尔排序
Cholechow
博客等级 码龄9年 37粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值