java排序算法(六):直接插入排序
java排序算法(六):直接插入排序
直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中
直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1..n-1)= o(n^2).其他情况下也要考虑移动元素的次数。故时间复杂度是o(n^2)
直接插入空间效率很好,只需要一个缓存数据单元,也就是说空间复杂度是o(1)
直接插入排序是稳定的
直接插入排序在数据以有一定顺序的情况下,效率较好。但如果数据无规则,则需要移动大量的数据。其效率就和冒泡排序和选择排序一样差了。
算法描述
对一个有n个元素的数据序列,排序需要n-1趟插入操作
第一趟插入 将第二个元素插入到前面的有序子序列-此时前面只有一个元素。当然是有序的
第二趟插入 将第三个元素插入前面的有序子序列。前面两个元素都是有序的
第n-1趟插入将第n个元素插入前面的有序序列,前面n-1个元素是有序序列
代码实现
package com.spring.test; import java.awt.print.Printable; /**
* 直接插入排序算法
*/
public class InsertSortTest {
public static void main(String[] args) {
int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
print(data);
insertSort(data);
System.out.println("排序后的数组");
print(data);
} public static void insertSort(int[] data){
for(int i=1;i<data.length;i++){
//缓存i处的元素值
int tmp = data[i];
if(data[i] < data[i-1]){
int j = i-1;
//整体后移一格
while(j>=0 && data[j] > tmp){
data[j+1] = data[j];
j--;
}
//最后将tmp插入合适的位置
data[j+1] = tmp;
print(data);
}
}
} /**
* 打印输出
*/
public static void print(int[] data){
for(int i=0;i<data.length;i++){
System.out.print(data[i]+"\t");
}
System.out.println();
} /**
* 交换数据
*/
public static void swap(int[] data,int i,int j){
if(i==j){
return;
}
data[i] = data[i]+data[j];
data[j] = data[i]-data[j];
data[i] = data[i]-data[j];
}
}
运行结果

java排序算法(六):直接插入排序的更多相关文章
- Java常见排序算法之折半插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之直接插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- java排序算法(七):折半插入排序
java排序算法(七):折半插入排序 折半插入排序法又称为二分插入排序法,是直接插入排序法的改良版本,也需要执行i-1趟插入.不同之处在于第i趟插入.先找出第i+1个元素应该插入的位置.假设前i个数据 ...
- 排序算法之直接插入排序Java实现
排序算法之直接插入排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb 选择排序:http://t.cn/hros6e 插入排序: ...
- 算法相关——Java排序算法之插入排序(四)
0. 前言 本系列文章将介绍一些常用的排序算法.排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个" ...
- java排序算法(一):概述
java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...
- Java排序算法之直接选择排序
Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...
- java排序算法(八):希尔排序(shell排序)
java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...
- Java排序算法之快速排序
Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分 ...
随机推荐
- javascript 获取滚动条距离顶部的位置(兼容所有的)。
function getScrollTop() { var scrollPos; if (window.pageYOffset) { scrollPos = window.pageYOffset; } ...
- Unhandled event loop exception No more handles
1.错误描述 2.错误原因 3.解决办法
- 通过ajax记录网站UV、PV数
1.通过jquery记录网站UV.PV数据 util.track = { log: function () { var referrer = util.browser.getReferrer(), h ...
- 求助:关于sql如何统计时间的问题
三.现在我们假设应用计时分为app应用和web应用,需要考虑如下几个方面: (1)多时间段(2)表中有冗杂数据 (3)用户是在web端和app端都登陆,这种类型的重复时间段只能取其一 存在数据: 存在 ...
- OpenGL shader渲染贴图
simple.vert #version core layout (location = ) in vec3 position; layout (location = ) in vec3 color; ...
- github上的文件比对
Skip to content This repository Pull requests Issues Marketplace Explor ...
- [SCOI2010]股票交易
题目大意: 网址:https://www.luogu.org/problemnew/show/P2569 大意:在接下来的T天中,每天股票有一个买入价格Api与卖出价格Bpi. 同时,每天买入股票数与 ...
- PKUWC2018游记
PKUWC2018游记 Day -inf 从去年的12月底开始停课,到现在也有整整一个月的时间了. 前两周考的是OI赛制,后来就变成了IOI赛制. 整体上考的很炸,虐场的次数远少于被虐的次数. 关于去 ...
- 【Learning】带花树——一般图最大匹配
一般图最大匹配--带花树 问题 给定一个图,求该图的最大匹配.即找到最多的边,使得每个点至多属于一条边. 这个问题的退化版本就是二分图最大匹配. 由于二分图中不存在奇环,偶环对最大匹配并无 ...
- enable_shared_from_this类的作用和实现
使用举例 实际中, 经常需要在一个被shared_ptr管理的对象的内部获取自己的shared_ptr. 比如: 通过this指针来构造一个shared_ptr, 如下: struct Bad { v ...