排序算法是最簡單的算法,也是最基本的算法。顧名思義,插入排序就是把當前待排序的元素插入到一個已經排好序的列表裏面。 一個很是形象的例子就是右手抓取一張撲克牌,並把它插入左手拿着的排好序的撲克裏面。插入排序的最壞運行時間是O(n2), 因此並非最優的排序算法。特色是簡單,不須要額外的存儲空間,在元素少的時候工做得好。java
Java裏面有不少數據類型,咱們選取的是最簡單的整數,但這並不失通常性。即便是本身定製化的對象,實現了java.lang.Comparable, 把對應的 大於號(>)以及小於號(<)換成compareTo便可。算法
因爲須要頻繁的操做以及打印數組,先寫一個小的數組工具類。代碼以下:數組
public class ArrayUtils { public static void printArray(int[] array) { System.out.print("{"); for (int i = 0; i < array.length; i++) { System.out.print(array[i]); if (i < array.length - 1) { System.out.print(", "); } } System.out.println("}"); } }
從數組的第二個元素開始,取得當前待處理的元素,插入到當前元素以前的子數組裏面,直到數組的末尾。插入排序的Java實現以及測試代碼以下:工具
public class InsertSortTest { public static void insertSort(int[] array) { if (array == null || array.length < 2) { return; } for (int i = 1; i < array.length; i++) { int currentValue = array[i]; int position = i; for (int j = i - 1; j >= 0; j--) { if (array[j] > currentValue) { array[j + 1] = array[j]; position -= 1; } else { break; } } array[position] = currentValue; } } public static void main(String[] args) { int[] array = { 3, -1, 0, -8, 2, 1 }; ArrayUtils.printArray(array); insertSort(array); ArrayUtils.printArray(array); } }