1. 程式人生 > >排序演算法02: 插入排序

排序演算法02: 插入排序

插入排序是這樣一種排序:
為了給要插入的元素騰出空間,我們需要將其餘所有元素在插入之前都向右移動一位。
與選擇排序一樣,當前索引左邊的元素是有序的,但它們的最終位置還不確定。
插入排序所需的時間取決於輸入中元素的初始順序,在實際應用中對某些型別的非隨機陣列很有效。

插入排序的比較次數範圍為 N-1 ~ N^2/2
插入排序的交換次數為範圍為 0 ~ N^2/2

對於隨機順序無重複主鍵的陣列,插入排序比選擇排序大概快一倍。

Insertion.java

public class Insertion extends BaseSort {
    public static void sort(Comparable[] aa){
        for(int i=1; i<aa.length; i++){
            for(int j=i; j>0 && less(aa[j], aa[j-1]); j--){
                exch(aa, j,(j-1));
            }
        }
    }

    public static void main(String[] args) {
        Comparable[] aa = getDoubleArray(5);
        sort(aa);
        show(aa);
    }
}