java排序算法-插入排序
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排序算法-插入排序的更多相关文章
- 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)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. ...
随机推荐
- AS 进行单元测试
以下为本人在AndroidStudio 2.0 上实测后得出的结论,不像网上那一堆堆的误人子弟的文章,都是过时的或者根本就是不对的. 简介 和eclipse需要配置清单文件不同,AndroidStud ...
- 洛谷 1373 小a和uim之大逃离
/* 很容易想到f[i][j][k][l][01] 表示到ij点 两个人得分为kl 01表示这一步谁走的 因为起点不同 路径不同 所以要枚举起点.. 时间复杂度 O(nmk*nmk) 空间复杂度 O( ...
- windows服务安装(System.ComponentModel.Win32Exception:远程过程调用失败)
“安装”阶段发生异常.System.ComponentModel.Win32Exception:远程过程调用失败 附上提示信息C:\Windows\Microsoft.NET\Framework\v4 ...
- OD: Kernel Vulnerabilities Analyze
内核漏洞大多出没于 ring3 到 ring0 的交互中.从 ring3 进入 ring0 的通道,以及操作系统提供的 API 都有可能存在漏洞.例如:驱动程序中 IoControl 的处理函数,SS ...
- android自定义listview实现圆角
在项目中我们会经常遇到这种圆角效果,因为直角的看起来确实不那么雅观,可能大家会想到用图片实现,试想上中下要分别做三张图片,这样既会是自己的项目增大也会增加内存使用量,所以使用shape来实现不失为一种 ...
- ASP.NET 日志
ASP.NET5已经内建集成了日志系统,你也可以用第三方的日志框架. 1. 在你的应用程序中实现日志 在Startup.cs文件中,在Configure里可以把ILoggerFactory注入进去,然 ...
- JavaScript Unicode字符操作
charCodeAt() 方法 定义和用法charCodeAt() 方法可返回指定位置的字符的 Unicode 编码.这个返回值是 0 - 65535 之间的整数.方法 charCodeAt() 与 ...
- (转)ECSHOP给分类添加代表图
转之--http://www.cnblogs.com/wangblognet/archive/2012/12/09/2809916.html ecshop的模板有很多不完善的地方,比如添加商品分类的时 ...
- Xcode快捷键 (本人总结常用的)
以下分类显示最常用的快捷键: 1. 文件 CMD + N: 新文件 CMD + SHIFT + N: 新项目 CMD + O: 打开 CMD + S: 保存 CMD + SHIFT + S: ...
- centos 6.X 安装输入法
1.打开终端 su 输入 密码 yum install "@Chinese Support" 2.接下来是启用中文输入法的操作 系统 ->首选项 ->输入法 3.在弹出 ...