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的应用在国内不稳定,但是在国外 ... 
随机推荐
- Mahout学习资料
			Apache Mahout 简介 http://www.ibm.com/developerworks/cn/java/j-mahout/ 从源代码剖析Mahout推荐引擎 http://blog.fe ... 
- struts1.x和struts2.x之间的一些区别
			转载自http://blog.csdn.net/john2522/article/details/7436307/ struts2不是struts1的升级,而是继承的webwork的血统,它吸收了st ... 
- Git命令行学习积累
			1.远程分支拉取到本地 $ git checkout -b develop origin/develop //检出远程的develop分支到本地 2.本地分支推送到远程 $ git checkout ... 
- PostSharp 结合 log4net 自动记录日志
			环境: VS 2012 PostSharp-4.1.28 (下载地址)https://visualstudiogallery.msdn.microsoft.com/a058d5d3-e654-43f ... 
- 纸壳CMS列表Grid的配置
			纸壳CMS(ZKEACMS)里的Grid是一个TagHelper,是对jQuery插件datatables的一个配置封装. Easy.Mvc.TagHelpers.GridTagHelper grid ... 
- API Test Postman接口测试之高级篇2
			API Test Postman接口测试之高级篇2 一.继承父类的设置: 二.导出及导入: 三.分享文档: 四.发布接口文档: 五.常用脚本: 右边框选的是一些常用的脚本,postman提供的,可以 ... 
- Linux程序设计:目录维护
			一.相关系统调用 1.1 chmod 改变访问权限. #include <sys/stat.h> int chmod(const char *path, mode_t mode) 1.2 ... 
- GO学习笔记 - 基本数据类型
			官方教程:https://tour.go-zh.org/basics/11 Go 的基本类型有Basic types bool string int int8 int16 int32 int64 ui ... 
- springmvc执行流程 源码分析
			进入DispatcherServlet 执行onRefresh,然后执行初始化方法initStrategies.然后调用doService——>doDispatch. 根据继承关系执行Servl ... 
- 使用Anaconda的python安装虚拟环境是出现错误:python -m venv venvdir----Error: Command '['D:\\Development\\Django\\test\\Scripts\\python.exe', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit
			在创建python虚拟环境的时候,如果使用的是Anaconda中集成的python -m venv venvdir就会出现不能安装pip的错误,原因是Anaconda没有ensurepip, 解决办法 ... 
