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)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. ...
随机推荐
- HUD 2444 The Accomodation of Students (二分图染色+最大匹配)
#include<iostream> #include<cstdio> #include<cstring> #define maxn 2010 using name ...
- 开始学习编程了…… 2015年九月七日 …… 31岁的Me.
给自己下的命令:做今天开始认认真真地开始学习编程,一年后的今天一定要找到一份编程的工作. 为什么要学编程?:因为不想回以前的圈子,“创业”快三年什么都给“创”没了,咳……,不过呢,倒是领略到编程能带来 ...
- ADO.NET和ORACLE操作数据库传参数赋值的方式
在使用.Net使用OracleParameter进行Oracle数据库操作的时候,因为Oracle和SQLServer针对查询参数化的语法不同, 在操作SQLServer的时候使用的是@Paramet ...
- HTML-点击收藏功能模块
先上效果图: 功能简单: 附上源码以及注解 <div class="info-attribute" id="collect"> <input ...
- XlFileFormat
-----转载:http://hi.baidu.com/liu_haitao/item/900ddb38979188c22f8ec26e 18 XlFileFormat.xlAddIn Microso ...
- 01-android快速入门
adb Android debug bridge 安卓调试桥 创建模拟器,屏幕尽量小些,启动速度运行速度快 Android项目的目录结构 Activity:应用被打开时显示的界面 src:项目代码 R ...
- [转]Delphi导出Excel的设置操作
procedure CreatRepSheet(SheetName:String;PageSize,PageLay:Integer); {新建Excel工作簿.进行页面设置} begin {新建Exc ...
- 基于GBT28181:SIP协议组件开发-----------第二篇SIP组件开发原理
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3937590.html,qq:1269122125. 上一节中讲的S ...
- tomcat启动报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable
linux 下 启动tomcat 报: Neither the JAVA_HOME nor the JRE_HOME environment variable is definedAt least o ...
- echarts的使用
ECharts是一个图形展示控件,基于javascript开发出来的,挺好用的,研究了下. 主页地址:http://echarts.baidu.com/index.html API地址:http:// ...