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的应用在国内不稳定,但是在国外 ...
随机推荐
- Spring学习(六)——集成memcached客户端
memcached是高性能的分布式内存缓存服务器.许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现RDBMS的负担加重.数据 ...
- C# defualt关键字默认值用法
默认值表达式生成类型的默认值. 默认值表达式在泛型类和泛型方法中非常有用. 使用泛型类和泛型方法时出现的一个问题是,如何在无法提前知道以下内容的情况下将默认值赋值给参数化类型 T: T 是引用类型还是 ...
- Android 获取模拟器与真机数据库
模拟器: localuser:~ localhost$ adb shell shell@android:/ $ su // 数据库复制到 Download 下 shell@android:/ # cp ...
- Eclipes批量创建文件夹
package file; import java.io.File; import java.io.IOException; import java.util.Scanner; public clas ...
- 【Oracle 12c】最新CUUG OCP-071考试题库(58题)
58.(16-1) choose the best answer: Examine the structure of the BOORSTRANSACTIONS table: Examine the ...
- leecode刷题(21)-- 删除链表的倒数第N个节点
leecode刷题(21)-- 删除链表的倒数第N个节点 删除链表的倒数第N个节点 描述: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2- ...
- django 视图 使用orm values_list()方法获取 指定的 多个字段的数据
from .models import UserInfodata_set = UserInfo.objects.all().values_list("user_name", &qu ...
- 【扫盲】HTML5、Web APP、3G网站、Wap网站傻傻分不清楚
移动互联网指手机网站和app,其中app分为native app(原生app),web app(html5开发),Hybrid app(前两种app结合):手机网站分为wap网站和3g网 ...
- ZooKeeper学习1---简单介绍
一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术主要用来解决分布式环境当中多个进程之间的同 ...
- python中的字符串和编码
了解编码之前首先说下这几个词的概率: 位.字节.字符.字符串 1.位(bit)也称为比特 这个其实很简单,因为计算机都是二进制存储数据,也就是0和1,一个0或者1就表示一位.这是计算机存储的最小单位. ...