排序算法之直接插入排序Java实现
排序算法之直接插入排序
舞蹈演示排序:
冒泡排序: http://t.cn/hrf58M
希尔排序:http://t.cn/hrosvb
选择排序:http://t.cn/hros6e
插入排序:http://t.cn/hros0W
快速排序:http://t.cn/ScTA1d
归并排序:http://t.cn/Sc1cGZ
一、直接插入排序的过程
1、直接插入排序由 N-1 趟排序组成。
2、基本思想:将第一个元素看成一个有序子序列,再依次从第二个记录起诸葛插入到这个有序的子序列中。
一般地,将 elem[i] 插入到由 elem[0] ~ elem[i-1] 构成的有序子序列中
时间复杂度:O(n) ~ O(n^2)
原始数组为:
[74, 27, 85, 59, 41, 66, 37, 92, 4, 93]
--------------------------------------
第 1趟
[27, 74, 85, 59, 41, 66, 37, 92, 4, 93]
第 2趟
[27, 74, 85, 59, 41, 66, 37, 92, 4, 93]
第 3趟
[27, 59, 74, 85, 41, 66, 37, 92, 4, 93]
第 4趟
[27, 41, 59, 74, 85, 66, 37, 92, 4, 93]
第 5趟
[27, 41, 59, 66, 74, 85, 37, 92, 4, 93]
第 6趟
[27, 37, 41, 59, 66, 74, 85, 92, 4, 93]
第 7趟
[27, 37, 41, 59, 66, 74, 85, 92, 4, 93]
第 8趟
[4, 27, 37, 41, 59, 66, 74, 85, 92, 93]
第 9趟
[4, 27, 37, 41, 59, 66, 74, 85, 92, 93]
--------------------------------------
排序后的数组为:
[4, 27, 37, 41, 59, 66, 74, 85, 92, 93]
二、直接插入排序的代码实现
1、方法一:
import java.util.Arrays; /**
*
* @title InsertSort
* @describe 直接插入排序
* @author 张富昌
* @date 2016年10月1日下午5:12:41
*/
public class InsertSort_1 { public static void main(String[] args) {
// 声明整型数组
int[] array = new int[10];
// 使用循环和随机数初始化数组
for (int i = 0; i < array.length; i++) {
array[i] = (int) Math.round(Math.random() * 100);
}
System.out.println("原始数组为:");
System.out.println(Arrays.toString(array));
System.out.println("--------------------------------------");
array = insertSort(array);
System.out.println("--------------------------------------");
System.out.println("排序后的数组为:");
System.out.println(Arrays.toString(array));
} /**
*
* 功能:插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。
*
* 参数:int[] array
*
* 返回类型:int[]
*/
public static int[] insertSort(int[] array) {
// 使用临时数组,替代原始数组
int[] arr = array;
// 临时变量
int temp;
for (int i = 1; i < arr.length; i++) { System.out.println("第 " + i + "趟");
for (int j = i; j >= 1; j--) {
// 较小的数排在前面
if (arr[j] < arr[j - 1]) {
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
} else {
break;
}
}
System.out.println(Arrays.toString(arr));
}
return arr;
}
}
2、方法二:
import java.util.Arrays; /**
*
* @title InsertSort
* @describe 直接插入排序
* @author 张富昌
* @date 2016年10月1日下午5:12:41
*/
public class InsertSort_2 { public static void main(String[] args) {
// 声明整型数组
int[] array = new int[10];
// 使用循环和随机数初始化数组
for (int i = 0; i < array.length; i++) {
array[i] = (int) Math.round(Math.random() * 100);
}
System.out.println(Arrays.toString(array));
System.out.println("--------------------------------------");
array = insertSort(array);
System.out.println("--------------------------------------");
System.out.println("排序后的数组为:");
System.out.println(Arrays.toString(array));
} /**
*
* 功能:插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。
*
* 参数:int[] array
*
* 返回类型:int[]
*/
public static int[] insertSort(int[] array) {
// 使用临时数组,替代原始数组
int[] arr = array;
int j, temp;
for (int i = 1; i < arr.length; i++) {
System.out.println("第 " + (i + 1) + "趟");
if (arr[i] < arr[i - 1]) {
temp = arr[i];
for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
System.out.println(Arrays.toString(arr));
}
return arr;
}
}
排序算法之直接插入排序Java实现的更多相关文章
- Java常见排序算法之折半插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之直接插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- 常用的排序算法介绍和在JAVA的实现(二)
一.写随笔的原因:本文接上次的常用的排序算法介绍和在JAVA的实现(一) 二.具体的内容: 3.交换排序 交换排序:通过交换元素之间的位置来实现排序. 交换排序又可细分为:冒泡排序,快速排序 (1)冒 ...
- 排序算法之折半插入排序的思想以及Java实现
1 基本思想 折半插入排序(binary insertion sort)的基本原理与直接插入排序相同,不同之处在于,确定当前记录在前面有序子数组中的位置时,直接插入排序是采用顺序查找的方法,而折半插入 ...
- 我的Java开发学习之旅------>Java经典排序算法之二分插入排序
一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比较, ...
- 各种排序算法的分析及java实现
排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强能写出个冒泡排序.由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间 ...
- (转)各种排序算法的分析及java实现
转自:http://www.cnblogs.com/liuling/p/2013-7-24-01.html 排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强 ...
- 各种排序算法的分析及java实现 分类: B10_计算机基础 2015-02-03 20:09 186人阅读 评论(0) 收藏
转载自:http://www.cnblogs.com/liuling/p/2013-7-24-01.html 另可参考:http://gengning938.blog.163.com/blog/sta ...
- 常用的排序算法介绍和在JAVA的实现(一)
一.写随笔的原因:排序比较常用,借此文介绍下排序常用的算法及实现,借此来MARK一下,方便以后的复习.(本人总是忘得比较快) 二.具体的内容: 1.插入排序 插入排序:在前面已经排好序的序列中找到合适 ...
随机推荐
- spring-boot-CommandLineRunner
在项目服务启动完成后就去加载一些数据 @Component public class MyStartupRunner1 implements CommandLineRunner { @Override ...
- css 实现圆形头像
1.方法一 直接设置img为圆形,这种情况下如果图片不是正方形,图片会被拉伸 <img class="circleImg" src="../img/photo/im ...
- linux挂载光盘
1.找到光盘的位置 ls -l /dev |grep cdrom mount /dev/sr0 /mnt [root@node2 /]# ls -l /dev |grep cdrom lrwxrwx ...
- flask插件系列之flask_uploads上传文件
前言 flask可以实现上传文件和下载文件的基本功能,但如果想要健壮的功能,使用flask_uploads插件是十分方便的. 安装 pip install flask_uploads 基本使用 # e ...
- python几种装饰器的用法
用函数装饰函数 这种比较常见首先定义装饰器函数 def cache(func): data = {} @wraps(func) def wrapper(*args, **kwargs): key = ...
- 26 About the go command go命令行
About the go command go命令行 Motivation Configuration versus convention Go's conventions Getting star ...
- linux定时任务-cron
/sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 ...
- 洛谷P3367并查集
传送门 #include <iostream> #include <cstdio> #include <cstring> #include <algorith ...
- 使用html+css+js实现倒计时,开启你痛苦的倒计时吧
使用html+css+js实现倒计时,开启你痛苦的倒计时吧 效果图: 这是我痛苦的倒计时,呜呜呜 好啦,再痛苦还是要分享代码,代码如下,复制即可使用: <!DOCTYPE html> &l ...
- SQL Server中常用全局变量介绍
在SQL Server中,全局变量是一种特殊类型的变量,服务器将维护这些变量的值.全局变量以@@前缀开头,不必进行声明,它们属于系统定义的函数.下表就是SQL Server中一些常用的全局变量. 全局 ...