插入排序算法通过对未排序的数据执行逐个插入至合适的位置而完成排序工作。思路简单,应用较多。但是此算法在数据无规律的情况下,需要移动大量的数据,效率不高。
步骤:
(1)首先对数组的前两个数据进行从小到大排序。
(2)接着将第3个数据与排好序的两个数据进行比较,将第3个数据插入合适的位置。
(3)然后,将第4个数据插入已经排好序的前3个数据中。
(4)不断重复上诉过程,直到把最后一个数据插入合适的位置。
通过一个简单的例子来了解一下:
比如现在有一组混乱的数据:5 3 4 9 2
一次排序: 3 5 4 9 2
二次排序: 3 4 5 9 2
三次排序: 3 4 5 9 2
四次排序: 2 3 4 5 9
下面给出实现代码:
package zhgyu.sort;
/**
* 插入排序算法
* @author zhgyu
*
*/
public class InsertionSort {
static final int SIZE = 10;
static void insertionSort(int[] arr) {
//存储短暂数
int temp;
int i,j;
for(i = 1; i < arr.length; i++) {
temp = arr[i];
j = i -1;
//插入数据
while(j >= 0 && temp < arr[j]) {
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
System.out.print("第"+ i +"步的排序结果:");
for(int k = 0; k < arr.length; k++) {
System.out.print(arr[k] + "\t");
}
System.out.println();
}
}
public static void main(String[] args) {
int[] arr = new int[SIZE];
int i;
for(i = 0; i < SIZE; i ++) {
arr[i] = (int)(Math.random()*(100 + 1));
}
//排序前的数组
System.out.print("排序前的数组:");
for(i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
//调用插入排序算法
insertionSort(arr);
//排序后的数组
System.out.print("排序后的数组:");
for(i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
}
}