算法回顾系列第二篇:直接插入排序算法
-------------------------------------------
直接插入排序
基本原理:
把n个待排序的元素看成为一个有序表和一个无序表。
开始时有序表中只包含一个元素,无序表中包含有n-1个元素。排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
程序实现:
public void sort(int[] data) {
int temp;
for(int i=1;i<data.length;i++){//已排序(有序表)的元素个数(第一个元素默认看作已排序).
//有序表的下一个元素(j)如果小于已排序的最大元素(j-1),则交换位置.
//如此向前(j--)与每个元素比较直到找到小于它的元素(data[j]<data[j-1])或者到第一个元素(j>0).
for(int j=i; (j>0)&&(data[j]<data[j-1]); j--){//for的初始化条件j=i只执行1次.
temp = data[j];
data[j] = data[j-1];
data[j-1] = temp;
}
System.out.println("Sort"+i+":"+Arrays.toString(data));//每趟排序后的结果.
}
}
上面程序中:
外层循环i代表已经排序的元素个数(即有序表的元素个数)。从1开始计数,表明第一个元素默认是有序的。
内层循环j代表无序表的第一个元素,j-1即有序表的最后一个元素。两个元素比较:
如果无序表的第一个元素大于有序表的最后一个元素,则结束本趟排序(因为有序表的最后一个元素一定是最大的,无序表的第一个元素如果比它还大,不需要交换位置)。
如果无序表的第一个元素小于有序表的最后一个元素,则交换位置,然后继续与有序表的倒数第二个元素进行比较,直到找到有序表中比它小的元素或者它排在了第一个时,结束本趟排序。
如此直到排序完N-1个元素(第一个元素无需排序)。
性能分析:
1、待排序元素已从小到大排好序(正序)或接近排好序时,所用的比较次数和移动次数较少;
2、当待排序元素已从大到小排好序(逆序)或接近排逆序时,所用的比较次数和移动次数较多。
最坏时间复杂度:O(n^2)
空间复杂度:1。
稳定性:稳定的排序。
分享到:
相关推荐
【低空经济】低空人工智能调度中心建设方案
少儿编程scratch项目源代码文件案例素材-诅咒大厦.zip
scratch少儿编程逻辑思维游戏源码-纸片马里奥 激流勇进.zip
scratch少儿编程逻辑思维游戏源码-一路跳跃.zip
内容概要:本文详细介绍了五个用于空气耦合超声仿真的COMSOL模型,涵盖二维和三维场景,适用于铝板和钢板的多种缺陷检测。每个模型都包含了具体的参数设置、边界条件选择以及优化技巧。例如,Lamb波检测模型展示了如何利用A0模态检测铝板内的气泡,而三维模型则强调了内存管理和入射角参数化扫描的重要性。表面波检测模型提供了裂纹识别的相关性分析方法,变厚度模型则展示了如何通过几何参数化来模拟复杂的工件形态。文中还分享了许多实用的操作技巧,如内存优化、信号处理和自动化检测逻辑。 适用人群:从事无损检测研究的技术人员、COMSOL软件使用者、超声检测领域的研究人员。 使用场景及目标:①帮助用户理解和掌握空气耦合超声仿真的具体实现方法;②提供实际工程应用中的缺陷检测解决方案;③指导用户进行高效的仿真建模和结果分析。 其他说明:文中提供的模型不仅涵盖了常见的缺陷检测场景,还包括了一些高级技巧,如参数化扫描、自动化检测逻辑等,能够显著提高工作效率。同时,文中还给出了硬件配置建议和一些常见的注意事项,确保用户可以顺利运行这些模型。
实训商业源码-【脐橙】租赁 2.80.0+租赁商家-毕业设计.zip
scratch少儿编程逻辑思维游戏源码-幽灵冲刺.zip
scratch少儿编程逻辑思维游戏源码-粘粘世界物理.zip
机器人开发教程&案例&相关项目资源,奖励仅
实训商业源码-酒吧微上墙4.1.0-毕业设计.zip
实训商业源码-会员计次卡V1.1.1-毕业设计.zip
实训商业源码-二手跳蚤市场V5.4.10带微信支付+上架通知+广告插件-毕业设计.zip
实训商业源码-健康保健类企业网站源码-毕业设计.zip
Linux环境安装mysql的RPM包以及安装步骤:客户端和服务端的安装
实训商业源码-房产中介小程序8.0.51+前端-毕业设计.zip
scratch少儿编程逻辑思维游戏源码-钟声.zip
实训商业源码-【最新版】Xyplayer X3.96 官方正式版-毕业设计.zip
scratch少儿编程逻辑思维游戏源码-追逐游戏.zip
内容概要:本文详细介绍了基于Android Studio开发的日历备忘录记事本项目,涵盖日历查看、添加备忘录、闹钟提醒和删除备忘录等功能。项目使用SQLite数据库进行数据管理和持久化,利用AlarmManager实现闹钟提醒功能。文章深入讲解了各个功能模块的实现细节,如日历视图的使用、数据库操作类的设计、闹钟设置的逻辑以及界面交互的优化。此外,还探讨了一些常见的开发技巧和注意事项,如时间戳的存储、手势识别的应用等。 适用人群:适用于初学者和有一定经验的Android开发者,尤其是希望深入了解SQLite数据库操作和AlarmManager使用的开发者。 使用场景及目标:① 学习如何使用Android Studio构建完整的应用程序;② 掌握SQLite数据库的基本操作,包括建表、增删查改;③ 理解AlarmManager的工作机制及其在实际项目中的应用;④ 提升用户体验,如优化界面交互和提高代码质量。 其他说明:文中提供的源码和详细的代码注释有助于读者更好地理解和实践。同时,项目中预留了一些扩展任务,鼓励读者进一步探索和提升技能。
X52K数控铣床改造纵向进给机构CAD装配图.rar