插入排序,一般也被称为直接插入排序。插入排序算法是基于某序列已经有序排列的情况下,通过一次插入一个元素的方式按照原有排序方式增加元素。这种比较是从该有序序列的最末端开始执行,即要插入序列中的元素最先和有序序列中最大的元素比较,若其大于该最大元素,则可直接插入最大元素的后面即可,否则再向前一位比较查找直至找到应该插入的位置为止。插入排序的基本思想是,每次将1个待排序的记录按其关键字大小插入到前面已经排好序的子序列中,寻找最适当的位置,直至全部记录插入完毕。执行过程中,若遇到和插入元素相等的位置,则将要插人的元素放在该相等元素的后面,因此插入该元素后并未改变原序列的前后顺序。我们认为插入排序也是一种稳定的排序方法。
public class InsertionSort {
public static void main(String[] args) {
Integer[] data = new Integer[]{17, 23, 15, 2, 19, 11, 22, 33, 14, 27, 16, 7, 6};
InsertionSort insertionSort = new InsertionSort();
insertionSort.sort(data);
}
public void sort(Comparable[] data) {
for (int i = 1; i < data.length; i++) {
for (int j = i; j > 0 && (data[j].compareTo(data[j - 1]) < 0); j--) {
Comparable temp = data[j];
data[j] = data[j - 1];