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搭建高性能App - React Native实战教程
直接上网址: http://gold.xitu.io/entry/5697a52160b2f5adfd5ea0f2/view http://gold.xitu.io/entry/5698908d9d2 ...
- 织梦dedecms列表序号从0到1开始的办法 autoindex,itemindex标签
自增1 arclist 标签下使用 [field:global.autoindex/] 默认从1开始 channel 标签下使用 [field:global.au ...
- [PHP开发] phpmailer问题 错误原因: Could not instantiate mail function
Send via the PHP mail() function function mail_send($header, $body) { // Create mail recipient list ...
- (二十三)mongodb中group的问题
今天的工作中我需要从mongodb数据库中查出一定的数据,并排序后返回给前台,数据库表中包含了ruleID,processingID,userID,updateTime等字段. 同一个ruleI ...
- java.sql.SQLException:Invalid value for getInt()-'zhangsan'
1.错误描述 java.sql.SQLException:Invalid value for getInt()-'zhangsan' 2.错误原因 在遍历打印查询结果时,rs.getInt(3),而在 ...
- Java和Flex整合报错(五)
1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...
- PhotoShop制作简单的文字动画--多媒体技术与应用
下面是最终实现的效果图: 1.新建图像,设置图像属性如下所示. 2.使用[横排文字工具]在背景图像上打上文字内容 3.[图层]——>[图层式样]——>[渐变叠加] 出现“图层样式”面板 4 ...
- Java并发编程-各种锁
安全性和活跃度通常相互牵制.我们使用锁来保证线程安全,但是滥用锁可能引起锁顺序死锁.类似地,我们使用线程池和信号量来约束资源的使用, 但是缺不能知晓哪些管辖范围内的活动可能形成的资源死锁.Java应用 ...
- PHP之工厂方法模式(三)
定义 定义一个用于创建对象的接口(抽象工厂类),让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到其子类(抽象工厂类的子类). 工厂方法模式是简单工厂模式的进一步抽象和推广.在简单工厂 ...
- Xampp相关命令
http://www.upwqy.com/details/5.html 1 启动关闭 需要切换目录: # cd /opt/lampp/ 启动 XAMPP # ./lampp start 停止 XAMP ...