直接插入排序算法的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
把a[i]插入到a[0],a[1],...,a[i-1]之中的具体实施过程为:先把a[i]赋值给变量t,然后将t依次与a[i-1],a[i-2],...进行比较,将比t大的元素右移一个位置,直到发现某个j(0<=j<=i-1),使得a[j]<=t或j为(-1),把t赋值给a[j+1]。
以下是直接插入排序算法的JAVA代码实现:
package com.fit.direct.insert;
public class DirectInsertSort {
/**
* 直接插入排序算法的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,
* 排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
*
* 把a[i]插入到a[0],a[1],...,a[i-1]之中的具体实施过程为:先把a[i]赋值给变量t,然后将t依次与a[i-1],a[i-2],
* ...进行比较,将比t大的元素右移一个位置,直到发现某个j(0<=j<=i-1),使得a[j]<=t或j为(-1),把t赋值给a[j+1]。
*
* 此种方法用for循环处理
*
* @param array
*/
public static void sort(int[] array) {
int length = array.length;
int temp = 0;
int local_i = 0;
for (int i = 0; i < length - 1; i++) {
local_i = i;
for (int j = i + 1; j > 0; j--) {
if (array[j] < array[local_i]) {
temp = array[local_i];
array[local_i] = array[j];
array[j] = temp;
}
local_i--;
}
print(array);
}
}
/**
* 此种方法用while循环处理。
*
* @param array
*/
public static void sort1(int[] array) {
int length = array.length;
int temp = 0;
int j = 0;
for (int i = 0; i < length - 1; i++) {
j = i;
while (j >= 1 && array[j] < array[j - 1]) {
temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
j--;
}
print(array);
}
}
public static void print(int[] array) {
StringBuffer sb = new StringBuffer("[");
for (int i = 0; i < array.length; i++) {
if (i < array.length - 1) {
sb.append(array[i]).append(",");
} else {
sb.append(array[i]);
}
}
sb.append("]");
System.out.println(sb);
}
public static void main(String[] args) {
int[] array = new int[] { 54, 3, 11, 34, 12, 8, 19 };
print(array);
System.out.println("=====================");
// sort(array);
sort1(array);
print(array);
}
}
运行结果如下:
[54,3,11,34,12,8,19]
=====================
[54,3,11,34,12,8,19]
[3,54,11,34,12,8,19]
[3,11,54,34,12,8,19]
[3,11,34,54,12,8,19]
[3,11,12,34,54,8,19]
[3,8,11,12,34,54,19]
[3,8,11,12,34,54,19]
分享到:
相关推荐
JAVA排序算法: 直接插入,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,包括算法的详细介绍,以及对几种算法的详细测试
Java语言实现的直接插入排序算法,代码里头有详细注释,注释皆为简单英文,因为这个算法比较简单,欢迎新手下载学习使用,欢迎后期的学习交流!
直接插入排序 前面文章已经讲完了交换类排序,接下来开始学习插入类排序。顾名思义,所谓插入排序指我们会为每一个数据安排一个适合它的位置并将其插入,直到所有数据就位则排序完成。 直接插入法便是插入排序的典型...
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
1.插入排序(直接插入排序、折半插入排序、希尔排序); 2.交换排序(冒泡泡排序、快速排序); 3.选择排序(直接选择排序、堆排序); 4.归并排序; 5.基数排序
自己写的java 插入排序算法,分享给大家,共同进步
用java对常用排序算法进行分析与实现.包含: 插入排序 直接插入排序、希尔排序 • 选择排序 简单选择排序、堆排序 • 交换排序 冒泡排序、快速排序 • 归并排序 • 基数排序
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
java排序算法汇总 将数据结构里的排序算法使用java实现 包括:归并 快速排序 直接选择 插入。。。。
八种排序算法原理及Java实现( 冒泡排序+快速排序直接插入排序+希尔排序+选择排序+归并排序+基数排序)
java排序算法集锦,包括:1.插入排序(直接插入排序、折半插入排序、希尔排序); 2.交换排序(冒泡泡排序、快速排序); 3.选择排序(直接选择排序、堆排序); 4.归并排序; 5.基数排序
插入排序(直接插入排序、折半插入排序、希尔排序); * 2.交换排序(冒泡泡排序、快速排序); * 3.选择排序(直接选择排序、堆排序); * 4.归并排序; * 5.基数排序。 * 关于排序方法的选择: * (1)...
java常用排序算法,直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、基数排序
Java各种排序算法集合: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(箱排序、基数排序)
Java中常见的排序算法 ...1.直接插入排序 2.希尔排序 3.选择排序 4.冒泡排序 5.归并排序 6.快速排序 7.堆排序 8.计数排序 9.桶排序 10.基数排序 包含这十种算法的讲解以及动态图解(ppt)和java实现
java实现插入排序,交换排序。插入排序包括直接插入排序,折半插入排序和希尔排序。交换排序包括冒泡排序。
## 九种内部排序算法的Java实现及其性能测试 ### 9种内部排序算法性能比较 第九种为java.util.Arrays.sort(改进的快速排序方法) 1. 100000的随机数据集 ![](http://7xlkoc.com1.z0.glb.clouddn.com/sort1.jpg) ...
八种java排序算法:直接插入排序;希尔排序;简单选择排序;堆排序;冒泡排序;快速排序;归并排序;基数排序
做了个Java Swing 图形界面,选择3中排序方法进行排序。工程用NetBeans 打开,运行Main.java文件或直接点击运行主程序,...BinSort.java(折半插入排序) QKSort.java(快速排序算法) SelectSort.java(简单选择排序)