Java-排序算法-插入排序
一、插入排序的原理
将一个记录插入到一个已经排好序的有序表中,从而得到一个新的,记录数增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-排序算法-插入排序的更多相关文章
- java排序算法-插入排序
public class InsertSortUtils { public static void main(String[] args) { insertSortTest(); shellSortT ...
- Java排序算法——插入排序
import java.util.Arrays; //================================================= // File Name : Select_S ...
- java排序算法(七):折半插入排序
java排序算法(七):折半插入排序 折半插入排序法又称为二分插入排序法,是直接插入排序法的改良版本,也需要执行i-1趟插入.不同之处在于第i趟插入.先找出第i+1个元素应该插入的位置.假设前i个数据 ...
- java排序算法(六):直接插入排序
java排序算法(六):直接插入排序 直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中 直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1 ...
- Java排序算法之直接选择排序
Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...
- java排序算法(一):概述
java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...
- java排序算法(八):希尔排序(shell排序)
java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...
- Java排序算法之快速排序
Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分 ...
- Java排序算法(三)
Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...
- Java排序算法(二)
java排序算法(二) 二.改进排序算法 2.1希尔排序 定义:希尔排序(ShellSort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. ...
随机推荐
- 推荐一款idea 翻译插件 ECTranslation
无意中看到一款idea翻译插件, ECTranslation,才知道有这么个东西,推荐给看到的人吧,使用简单,值得拥有. 参考:http://p.codekk.com/detail/Android/S ...
- ETC2 区别于ETC的重要点
ETC2 主要是对于NPOT却是4的倍数的贴图有较大压缩,比如一个1920X1080RGB的Loading图,ETC4压缩下不管用,大小5.9M,ETC2下压缩为1M
- Pronunciation Guide for 25 Common Fruits
Pronunciation Guide for 25 Common Fruits Share Tweet Share Tagged With: Vocabulary Words Know how to ...
- ASP.NET 身份验证机制
ASP.NET提供了3种认证方式:windows身份验证:IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问.Forms验证 :用Cookie来保存 ...
- DOM精简版笔记
1.1. 基本概念 1.1.1. DOM DOM Document Object Model 文档对象模型 就是把HTML文档模型化,当作对象来处理 DOM提供的一系列属性和方法可以 ...
- C#调用非托管dll--路径问题
DllImport会按照顺序自动去寻找的地方:1.exe所在目录(一般在bin目录下)2.System32目录3.环境变量目录所以只需要你把引用的DLL 拷贝到这三个目录下 就可以不用写路径了或者可以 ...
- h5内容初探
h5简介: h5新特性 h5新增标签 article 和 section 的区别相当于 div 和 p标签的区别 1—6都是块级元素 h5新增属性 拖放 拖动事件 <style> ...
- JVM G1GC参数配置
https://www.oracle.com/technetwork/articles/java/g1gc-1984535.html 主要这两个参数需要设置下,ParallelGCTh ...
- JUC(java.util.concurrent)
在 Java 5.0 提供了 java.util.concurrent (简称JUC )包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池.异步 IO 和轻 ...
- CentOS 6.5下Redis安装测试
NoSQL之Redis - CentOS 6.5安装测试 1.下载redis 可以在线安装或者下载 redis ①在线安装前需要检测是否存在rpm包不存在的话查看yum在线是否存在rpm包不存在的话就 ...