java实现插入排序算法 附单元测试源码
插入排序算法
public class InsertSortTest {
/**
* @param args
*/
public static void main(String[] args) {
int[] a={3,5,9,16,29,47,78,89,94};
int key=47;
int[] b=insertSort(a,key);
for(int i=0;i<b.length;i++){
System.out.print(b[i]+" ");
}
}
public static int[] insertSort(int[] unsorted,int key){
int len=unsorted.length;
int[] sorted=new int[len+1];
for(int i=0;i<len;i++){
//when key exists in edge of array
if(key<unsorted[0]){
sorted[0]=key;
System.arraycopy(unsorted, 0, sorted, 1, len);
}
if(key>unsorted[len-1]){
sorted[sorted.length-1]=key;
System.arraycopy(unsorted, 0, sorted, 0, len);
}
//when key exists in mid of array
if(key>unsorted[i]){
sorted[i]=unsorted[i];
}else{
sorted[i]=key;
System.arraycopy(unsorted, i, sorted, i+1, len-i);
break;
}
}
return sorted;
}
}
单元测试源码:(使用junit4)
public class InsertSortUnitTest {
@Test
public void testLT() {
int[] a={3,5,9,16,29,47,78,89,94};
int key=-5;
int[] result={-5,3,5,9,16,29,47,78,89,94};
int[] b=InsertSortTest.insertSort(a,key);
for(int i=0;i<result.length;i++){
assertEquals(result[i],b[i]);
}
}
@Test
public void testGT() {
int[] a={3,5,9,16,29,47,78,89,94};
int key=205;
int[] result={3,5,9,16,29,47,78,89,94,205};
int[] b=InsertSortTest.insertSort(a,key);
for(int i=0;i<result.length;i++){
assertEquals(result[i],b[i]);
}
}
@Test
public void testMid() {
int[] a={3,5,9,16,29,47,78,89,94};
int key=50;
int[] result={3,5,9,16,29,47,50,78,89,94};
int[] b=InsertSortTest.insertSort(a,key);
for(int i=0;i<result.length;i++){
assertEquals(result[i],b[i]);
}
}
@Test
public void testEqual(){
int[] a={3,5,9,16,29,47,78,89,94};
int key=47;
int[] result={3,5,9,16,29,47,47,78,89,94};
int[] b=InsertSortTest.insertSort(a,key);
for(int i=0;i<result.length;i++){
assertEquals(result[i],b[i]);
}
}
}
程序进一步优化:
public class InsertSortTest {
/**
* @param args
*/
public static void main(String[] args) {
Comparable[] a={3f,5f,9f,16f,29f,47f,78f,89f,94f};
Comparable key=47.78f;
Comparable[] b=insertSort(a,key);
for(int i=0;i<b.length;i++){
System.out.print(b[i]+" ");
}
}
public static Comparable[] insertSort(Comparable[] unsorted,Comparable key){
int len=unsorted.length;
Comparable[] sorted=new Comparable[len+1];
for(int i=0;i<len;i++){
//when key exists in edge of array
if(key.compareTo(unsorted[0])<0){
sorted[0]=key;
System.arraycopy(unsorted, 0, sorted, 1, len);
}
if(key.compareTo(unsorted[len-1])>0){
sorted[sorted.length-1]=key;
System.arraycopy(unsorted, 0, sorted, 0, len);
}
//when key exists in mid of array
if(key.compareTo(unsorted[i])>0){
sorted[i]=unsorted[i];
}else{
sorted[i]=key;
System.arraycopy(unsorted, i, sorted, i+1, len-i);
break;
}
}
return sorted;
}
}
单元测试的就略过了吧。
java实现插入排序算法 附单元测试源码的更多相关文章
- Java导出Excel(附完整源码)
导出excel是咱Java开发的必备技能啦,之前项目有这个功能,现在将其独立出来,分享一下.所用技术就是SpringBoot,然后是MVC架构模式.废话不多说,直接上代码了,源码点末尾链接就可以下载. ...
- 转:微信开发之使用java获取签名signature(贴源码,附工程)
微信开发之使用java获取签名signature(贴源码,附工程) 标签: 微信signature获取签名 2015-12-29 22:15 6954人阅读 评论(3) 收藏 举报 分类: 微信开发 ...
- Spring Boot整合ElasticSearch和Mysql 附案例源码
导读 前二天,写了一篇ElasticSearch7.8.1从入门到精通的(点我直达),但是还没有整合到SpringBoot中,下面演示将ElasticSearch和mysql整合到Spring Boo ...
- iOS下使用SHA1WithRSA算法加签源码
首先了解一下几个相关概念,以方便后面遇到的问题的解决: RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的,RSA就是取自他们三个人的名字.算法基于一个数 ...
- Java并发指南12:深度解读 java 线程池设计思想及源码实现
深度解读 java 线程池设计思想及源码实现 转自 https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_ ...
- 单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件)
单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件) 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件) webrtc的音频处理模块分为降噪ns,回音消除aec,回声 ...
- 用Assert(断言)封装异常,让代码更优雅(附项目源码)
有关Assert断言大家并不陌生,我们在做单元测试的时候,看业务事务复合预期,我们可以通过断言来校验,断言常用的方法如下: public class Assert { /** * 结果 = 预期 则正 ...
- 在WebBrowser中执行javascript脚本的几种方法整理(execScript/InvokeScript/NavigateScript) 附完整源码
[实例简介] 涵盖了几种常用的 webBrowser执行javascript的方法,详见示例截图以及代码 [实例截图] [核心代码] execScript方式: 1 2 3 4 5 6 7 8 9 1 ...
- Asp.net MVC集成Google Calendar API(附Demo源码)
Asp.net MVC集成Google Calendar API(附Demo源码) Google Calendar是非常方便的日程管理应用,很多人都非常熟悉.Google的应用在国内不稳定,但是在国外 ...
随机推荐
- archlinux 64bit 开发android
arch 64位下直接运行android emulator会出现错误:“Failed to start emulator: Cannot run program "xxxx/sdk/tool ...
- Javascript设计模式理论与实战:单例模式
在Javascript中,单例模式是一种最基本又经常用到的设计模式,可能在不经意间就用到了单例模式. 本文将从最基础的理论开始,讲述单例模式的基本概念和实现,最后用一个例子来讲述单例模式的应用. 理论 ...
- sql server 关于表中只增标识问题
由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错误,不能修改 set identity_inse ...
- .Net Core IFormFile 始终为空的问题
之前获取上传文件都是使用Request.Form.Files获取,直到这次改成定义形参 IFormFile时才遇到这个问题. // POST api/values [HttpPost] public ...
- C# 连接sqlite数据库
web.config <connectionStrings> <add name="SQLiteDB" connectionString="Data S ...
- 63. 不同路径 II leetcode JAVA
题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 现在 ...
- ADB模块源码分析(二)——adb server的启动
1. ADB Server的启动 前面我们讲到adb模块的源码在system/core/adb下面,通过查看Android.mk文件我们了解到这个adb 模块回编译生成连个可执行文件adb.adbd, ...
- java学习笔记—ServletConfig、ServletContext接口(13)
ServletConfig是一个由Tomcat服务器在初始化Servlet的时候创建并传递进来的一个对象. 该对象主要描述的时候一个servlet的配置信息. 如: <servlet> ...
- “全栈2019”Java多线程第二章:创建多线程之继承Thread类
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 【vue】——使用watch 观察路由变化,重新获取内容
更新:11-29 时隔半年,又重新使用VUE进行开发,有了新方案--beforeRouteLeave 在组件内直接使用,前提是你用了vue-router: beforeRouteLeave (to, ...