public class InsertSortUtils {
public static void main(String[] args) {
insertSortTest();
shellSortTest();
} private static void insertSortTest() {
int[] values = { 5, 2, 4, 1, 3 };
System.out.print("直接插入排序前: ");
Utils.printArray(values);
insertSort(values);
System.out.print("直接插入排序后: ");
Utils.printArray(values);
} private static void shellSortTest() {
int[] sortArray = { 5, 2, 4, 1, 3 };
System.out.print("希尔排序前: ");
Utils.printArray(sortArray);
shellSort(sortArray);
System.out.print("希尔排序后: ");
Utils.printArray(sortArray);
} public static void insertSort(int[] arr) {
int temp;
int j = 0;
for (int i = 1; i < arr.length; i++) {
// 此处的判断很重要,这里体现了插入排序比冒泡排序和选择排序快的原因。
if (arr[i] < arr[i - 1]) {
temp = arr[i];
// 数据往后移动
for (j = i - 1; j >= 0 && temp < arr[j]; j--) {
arr[j + 1] = arr[j];
}
// 将数据插入到j+1位置
arr[j + 1] = temp;
// System.out.print("第" + (i) + "次:");
// Utils.printArray(values);
}
}
} public static void shellSort(int[] arr) {
int tmp; // 暂存变量
int arrLen = arr.length;
int step = arrLen/2; // 初始集合间隔长度
int pointer; // 进行处理的位置 while(step > 0){
// 对各个集合进行处理
for (int j = step; j < arrLen; j++) {
tmp = arr[j]; // 暂存Data[j]的值,待交换值时用
pointer = j - step; // 计算进行处理的位置 // 进行集合内数值的比较与交换值
while (pointer >= 0 && pointer < arrLen && tmp < arr[pointer]) {
arr[pointer + step] = arr[pointer]; // 计算下一个欲进行处理的位置
pointer = pointer - step;
}
// 与最后的数值交换
arr[pointer + step] = tmp;
}
step /= 2;// 计算下次分割的间隔长度
}
}
}

  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. Java排序算法(三)

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

  9. Java排序算法(二)

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

随机推荐

  1. ASP.NET-FineUI开发实践-17

    我又不用FineUI开发,所以FineUI项目经验等于0,最近在忙别的,所以也没工夫研究.积累了论坛和群里的问题,写下来留个备份 1.在grid可编辑单元格中,如果需要在点击该单元格时,单元格中所有文 ...

  2. 【转】mysql数据库中实现内连接、左连接、右连接

    [转]mysql数据库中实现内连接.左连接.右连接 内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础把对应数据查出来 首先创建数据库中的表,数据库代码如下: /* Navicat MyS ...

  3. 关于typedef int(*lpAddFun)(int, int)

    lpAddFun是typedef定义的一个名称 可以用来定义变量 比如 lpAddFun p; 那 p就是 int(*p)(int, int); 首先(*p)说明p是一个指针,(*p)();说明p指向 ...

  4. js函数--关于toString和valueOf

    js函数--关于toString和valueOf 标签(空格分隔): JavaScript 今天看到一个试题,实现如下语法的功能: var a = add(2)(3)(4); //9 这个就是一个高阶 ...

  5. java_reflect_02

    按我们所知道的.对于类中的method,constructor,field如果访问属性是private的情况下我们是访问不了的,但通过反射就可以做到 仔细分析api发现Method,Construct ...

  6. Unable to locate package错误解决办法

    新装了VMWare Player,结果装上Ubuntu12.04后安装软件都提示:Unable to locate package错误,解决方法非常简单,终端输入以下命令即可: sudo apt-ge ...

  7. MySQL Server 5.6 解压版安装配置

    MySQL解压版下载地址为: http://dev.mysql.com/downloads/mysql/5.6.html#downloads 安装及配置步骤: ①将MySQL的zip包解压到路径C:\ ...

  8. SecureCRT上使用公钥登陆Linux服务器

    SecureCRT部分配置 1.首先生成公钥. 打开SecureCRT(我的版本为7.0,估计其他版本基本相同)程序,点击菜单栏的“工具”->“创建公钥”.按照步骤执行.其中一步比较重要就是选择 ...

  9. ActiveX控件资料

    Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(1) 分类: C#2011-05-27 15:50 403人阅读 评论(0) 收藏 举报 c#stringhook ...

  10. javascript 向上滚动

    <html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Co ...