(一)插入排序 算法
插入排序(Insertion-Sort)的算法描述是一種簡單直觀的排序算法。它的工做原理是經過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,於是在從後向前掃描過程當中,須要反覆把已排序元素逐步向後挪位,爲最新元素提供插入空間。app
1.算法描述: ide
(1)從第一個元素開始,該元素能夠認爲已經被排序;ui
(2)取出下一個元素,在已經排序的元素序列中從後向前掃描;spa
(3)若是該元素(已排序)大於新元素,將該元素移到下一位置;code
(4)重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;blog
(5)將新元素插入到該位置後;排序
(6)重複步驟2~5io
2.手動模擬排序:event
3.算法分析:
(1)時間複雜度:平均狀況:O(n2) 最好狀況 O(n) 最壞狀況 O(n^2)
(2)空間複雜度: O(1)
(3)穩定性:穩定
(二)代碼實現:
public class InsertSort { public static void main(String[] args) { int[] arr = {3,4,1,2,7,8,6,5}; Insert(arr);//排序 System.out.println("-----------------------------------------"); print(arr);//打印結果 } private static void Insert(int[] arr) { if(arr == null || arr.length <= 1){ return; } for (int i = 1; i < arr.length; i++) { int current = arr[i]; int j = i - 1; for (; j >= 0 && arr[j] > current; j--) { arr[j + 1] = arr[j]; } //插入 arr[j + 1] = current; //打印每次排序後的結果 print(arr); } } public static void print(int[] arr){ StringBuilder sb = new StringBuilder("["); for (int i = 0; i < arr.length; i++) { sb.append(arr[i]); if(i != arr.length - 1){ sb.append(", "); } } System.out.println(sb.append("]")); } }