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的应用在国内不稳定,但是在国外 ...
随机推荐
- 三部曲搭建本地nuget服务器(图文版)
下载Demo: 1.新建web的空项目 2.引入nuget包 3.修改配置文件config(可以默认) 运行效果:
- 在一般处理程序清理cookie
清理cookie在ashx里面很奇怪,因为直接设置过期时间并不能成功,cookie还是会存在.所以需要添加一个同名的Cookie设置过期时间覆盖 HttpCookie cookie = null; / ...
- php—Smarty-缓存1(25)
一. 缓存原理: IE:将资源文件保存至本地 Smarty:将缓存保存到服务器 编译 < 缓存 < 静 ...
- “java.lang.NullPointerException”异常分析
1.父类定义的某个属性,没有被子类使用,或者在子类中,又重新定义一次. 2.因为调用了一个object的方法,且此object的reference为null:比如说:String a=null; // ...
- 利用wxpy进行微信信息发送详解(一)
利用wxpy进行微信信息自动发送,简直是骚扰神器,除非拉黑你. 那我们就来设置一个场景吧,五秒发送一次,一次发送10条 首先我们来整理一下思路: ♦1.首先我们要从网上爬去我们想要发送的内容 ♦2.登 ...
- Azure 部署K8S(二)
在"China Azure中部署Kubernetes(K8S)集群"一文中,我们使用的ACS Version及Kubernete Version版本都比较低,ACS Version ...
- iOS --高仿QQ空间页面
1.首先分析一下qq空间页面的主要2个功能: 1)随着TableView的向上滑动导航栏的颜色渐变,变化过程是从透明变成白色. 2)随着TableView的向下滑动,图片随着offset放大. 2.首 ...
- C语言数据结构之哈夫曼树及哈夫曼编码的实现
代码清单如下: #pragma once #include<stdio.h> #include"stdlib.h" #include <string.h> ...
- JSP页面开发知识点整理
刚学JSP页面开发,把知识点整理一下. ----------------------------------------------------------------------- JSP语法htt ...
- Python文件读取和数据处理
一.python文件读取 1.基本操作 读取文件信息时要注意文件编码,文件编码有UFT-8.ASCII或UTF-16等. 不过在python中最为常用的是UTF-8,所以如果不特别说明就默认UTF-8 ...