經過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應的位置並插入。插入排序很是相似於整撲克牌。在開始摸牌時,左手是空的,牌面朝下放在桌上。接着,一次從
桌上摸起一張牌,並將它插入到左手一把牌中的正確位置上。爲了找到這張牌的正確位置,要將它與手中已有的牌從右到左地進行比較。不管何時,左手中的牌都是排好序的。若是輸入數組已是排好序的話,插入排序出現最佳狀況,其運行時間是輸入規模的一個線性函數。若是輸入數組是逆序排列的,將出現最壞狀況。平均狀況與最壞狀況同樣,其時間代價是(n2)。java
public class InsertionSortTest { public static void main(String[] args) { int[] array = {1, 2, 5, 41, 7, 11, 13, 17, 59, 19, 23, 29, 31, 37, 43, 47, 53}; int[] bubbleSortArrays = insertionSort(array); for (int s : bubbleSortArrays) { System.out.print(s + " "); } } /** * 插入排序 * * @param arr * @return */ public static int[] insertionSort(int[] arr) { for (int i = 1; i < arr.length; i++) { //插入的數 int insertVal = arr[i]; //被插入的位置(準備和前一個數比較) int index = i - 1; //若是插入的數比被插入的數小 while (index >= 0 && insertVal < arr[index]) { //將把 arr[index] 向後移動 arr[index + 1] = arr[index]; //讓 index 向前移動 index--; } //把插入的數放入合適位置 arr[index + 1] = insertVal; } return arr; } }