- 基本思想:
排序算法之插入排序,将待排序的序列分为两部分,待排序和已排序,与选择排序不一样的是,插入排序每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。
/**
* 直接插入排序:
* 注意所有排序都是从小到大排。
*/
public class InsertSort {
/**
* 排序算法的实现,对数组中指定的元素进行排序
* @param array 待排序的数组
* @param from 从哪里开始排序
* @param end 排到哪里
* @param c 比较器
*/
public void insert(Integer[] array, int from, int end) {
for (int i=from+1; i<=end; i++) {
for (int j = 0; j < i; j++) {
Integer insertedElem = array[i];
if ((array[j].compareTo(insertedElem)) > 0) {
move(array, j, i - 1);
array[j] = insertedElem;
break;
}
}
}
/**
* 数组元素后移
* @param array 待移动的数组
* @param startIndex 从哪个开始移
* @param endIndex 到哪个元素止
*/
public void move(Integer[] array, int startIndex, int endIndex) {
for (int i = endIndex; i >= startIndex; i--) {
array[i+1] = array[i];
}
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
Integer[] intgArr = { 5, 9, 1, 4, 2, 6, 3, 8, 0, 7 };
InsertSort insertSort = new InsertSort();
insertSort.insert(intgArr,0,intgArr.length-1);
for(Integer intObj:intgArr){
System.out.print(intObj + " ");
}
}
}