排序算法之直接插入排序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.插入排序 插入排序:在前面已经排好序的序列中找到合适 ...
随机推荐
- 【C++】数组-整数从大到小排序
1.实现过程 定义整型数组src,长度为10,初始化为{11,12,47,24,49,69,90,89,18,39}.之后用嵌套for循环比较相邻两个元素的大小,如果前一个元素大于后一个,不做任何操作 ...
- Ubuntu下 git 服务器的搭建【转】
转自:http://www.open-open.com/lib/view/open1391477731082.html 搭建git服务器的4个步骤 1 配置服务器前的准备工作 首先ubuntu系统 ...
- cbow&&skipgram详细
前面:关于层次huffman树和负例采样也要知道的,这里就不详细写了 来源于:https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=224 ...
- 读取文件和输入——read 脚本命令
Linux之read命令使用 read命令: read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 1)read后面的变量var可以只有一个,也可以有多个,这时如果输入 ...
- 洛谷P2312解方程
传送门 思路分析 怎么求解呢? 其实我们可以把左边的式子当成一个算式来计算,从1到 $ m $ 枚举,只要结果是0,那么当前枚举到的值就是这个等式的解了.可以通过编写一个 $ bool $ 函数来判断 ...
- How to omit h1 title heading in HTML export
How to omit h1 title heading in HTML export */--> Introduce how to omit h1 title in the exported ...
- Linux下的IPC机制
Linux下的IPC机制 IPC(Inter-Process Communication)是多个进程之间相互沟通的一种方法.在linux下有多种进程间通信的方法. 共享内存 Linux内存共享有多种, ...
- WordPress解决优酷、土豆视频移动端观看问题并自适应
转:https://www.xhsay.com/wp-iframe-handler-youku-tudou.html 虽然WordPress能直接插入优酷.土豆的视频但是无法在移动端观看,于是乎笨笨就 ...
- SSIS 学习之旅 FTP文件传输-FTP任务
这一章主要讲解一下FTP控件. 设计: 通过Demon库的Users表数据生成CSV文件. 生成后的CSV文件抛送到FTP指定目录下. 其他控件的使用这里就不做详细讲解了.大家如果有不懂得可以 ...
- 彻底卸载sql2008后重新安装
彻底卸载sql2008方法 --打开控制面板,在控制面板中卸载所有带sql server的程序. --删除C:\Program Files\Microsoft SQL Server这整个文件夹, -- ...