一、插入排序的原理

将一个记录插入到一个已经排好序的有序表中,从而得到一个新的,记录数增1的新的有序表。从第一个元素开始,先将第一个元素看做一个排好序的子序列,然后从第二个元素开始起,对第二个元素进行插入,之后得到一个两个元素的有序表,然后再对第三个元素进行插入,得到一个三个元素的有序表...,依次类推,直到最后一个元素插入正确,整个序列有序为止。

二、插入排序的伪代码实现

 INSERTION-SORT(A)
for j ← 2 to length[A]
do key ← A[j]
▹ Insert A[j] into the sorted sequence A[1 .. j - 1] to generate a new sorted sequence A[1 .. j]
i ← j - 1
while i > 0 and A[i] > key
do A[i + 1] ← A[i]
i ← i - 1
A[i + 1] ← key

三、插入排序的Java源码实现

 import java.util.Comparator;

 public class InsertSort {

     /**
* 泛型方法实现插入排序算法,
* 泛型的类型不能是基础类型的,必须得是引用类型的
*/
public static <T> void insertSort(T[] t, Comparator<? super T> comparator){
T key = t[0];
for(int j = 1; j < t.length; j ++)
{
key = t[j];
//Insert the t[j] into the sorted sequence t[0, j-1], to generate a new sorted sequence t[0, j]
int i = j-1;
while(i > -1 && comparator.compare(t[i], key) > 0)
{
t[i+1] = t[i];
i--;
}
t[i+1] = key;
}
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer[] ints = {2, 0, 5, 23, 1, 4, 8, 56, 19};
insertSort(ints, new Comparator<Integer>(){
public int compare(Integer o1, Integer o2){
return o1.intValue() - o2.intValue();
}
}); for (int i = 0; i < ints.length; i++)
{
System.out.print(ints[i] + " ");
}
System.out.println();
} }

运行结果:

0 1 2 4 5 8 19 23 56 

四、复杂度分析

O(N^2)

Java-排序算法-插入排序的更多相关文章

  1. java排序算法-插入排序

    public class InsertSortUtils { public static void main(String[] args) { insertSortTest(); shellSortT ...

  2. Java排序算法——插入排序

    import java.util.Arrays; //================================================= // File Name : Select_S ...

  3. java排序算法(七):折半插入排序

    java排序算法(七):折半插入排序 折半插入排序法又称为二分插入排序法,是直接插入排序法的改良版本,也需要执行i-1趟插入.不同之处在于第i趟插入.先找出第i+1个元素应该插入的位置.假设前i个数据 ...

  4. java排序算法(六):直接插入排序

    java排序算法(六):直接插入排序 直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中 直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1 ...

  5. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  6. java排序算法(一):概述

    java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...

  7. java排序算法(八):希尔排序(shell排序)

    java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...

  8. Java排序算法之快速排序

    Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分 ...

  9. Java排序算法(三)

    Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...

  10. Java排序算法(二)

    java排序算法(二) 二.改进排序算法 2.1希尔排序 定义:希尔排序(ShellSort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. ...

随机推荐

  1. 机器学习进阶-图像基本操作-边界补全操作 1.cv2.copyMakeBoder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REPLICATE) 进行边界的补零操作 2.cv2.BORDER_REPLICATE(边界补零复制操作)...

    1.cv2.copyMakeBoder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REPLICATE) 参数说明: i ...

  2. ORM 的基本操作

    https://www.cnblogs.com/sss4/p/7070942.html

  3. OS位数,基本概念,结合iOS

    CPU位数,一般指CPU支持的指令集位数,32位CPU对应32位的指令集,64位的CPU对应64位的指令集,不过为了向下兼容,64位CPU也支持32位的指令集. 操作系统位数,一般指操作系统对应的指令 ...

  4. jquery 设计的思路-----初级

    jquery.js 很经典,其中有一些设计思路简直非常经典 1.安全的创建一个构造函数并进行调用: <script> // 这是一种安全的构造函数的创建方法,在调用构造函数G的时候,不论使 ...

  5. 尚硅谷redis学习1-NOSQL简介

    本系列是自己学习尚硅谷redis视频的记录,防止遗忘,供以后用到时快速回忆起来,照抄视频和资料而已,没什么技术含量,仅给自己入门了解,我是对着视频看一遍再写的,视频地址如下:尚硅谷Redis视频 背景 ...

  6. Sql Server 中由数字转换为指定长度的字符串

    一个列的数据类型是 int ,从 1 开始自动增长,另一个列是字符串,现在想把 int 列转换成 九个字符,比如 1 转换后就是 000000001 ,添到字符串列,怎么实现呢? set @imaxU ...

  7. 3.SLB 回话保持功能分析

    参考文档: 七层会话保持 配置服务器Cookie会话保持常见问题四层监听  

  8. 如何安全的在不同工程间安全地迁移asset数据?三种方法

    答:1.将Assets和Library一起迁移2.导出包package3.用unity自带的assets Server功能

  9. c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明

    https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/explicit https://docs.mic ...

  10. React之使用Context跨组件树传递数据

    ---------------------------------  讲解一 原文:https://blog.csdn.net/xuxiaoping1989/article/details/78480 ...