1.從數組第二個元素(當前元素)開始不斷和以前的元素比較大小,直到遍歷完整個數組java
2若是以前元素比當前元素大(以前的元素爲從當前元素前1個元素開始遍歷到數組第一個元素),將以前元素複製到後一格位置,而後繼續判斷再下一個元素和當前元素的大小,重複2數組
3作2直到找到了一個元素比當前元素小,那這個元素後面的那個位置就是當前元素須要插入的位置.ide
1 package algorithm; 2 3 import java.util.Arrays; 4 5 /** 6 * 7 * 插入排序 8 * 9 * @author jyzjyz12@163.com 10 * @since 2017年2月28日 上午10:12:54 11 */ 12 public class InsertSortTest1 { 13 14 public static void main(String[] args) { 15 int[] arr1 = { 4, 7, 5, 6, 1, 3, 8 }; 16 int[] arr2 = { 7, 6, 5, 4, 3, 2, 1 }; 17 int[] arr3 = { 5, 9, 3, 7, 8, 6, 1, 2, 4 }; 18 int[] arr4 = { 13, 2, 5, 4, 88, 76, 68, 87, 55, 88, 88, 77, 67, 99, 100, 5, 53, 52, 51, 66 }; 19 sort(arr1); 20 sort(arr2); 21 sort(arr3); 22 sort(arr4); 23 System.out.println(Arrays.toString(arr1)); 24 System.out.println(Arrays.toString(arr2)); 25 System.out.println(Arrays.toString(arr3)); 26 System.out.println(Arrays.toString(arr4)); 27 } 28 29 public static void sort(int[] arr) { 30 for (int i = 1; i < arr.length; i++) { // 從第2個元素開始遍歷整個數組 31 int j = i, value = arr[i]; // 記錄一下當前的元素的位置和值 32 while (j > 0 && arr[j - 1] > value) { // 當前元素不斷和以前的元素比較大小,直到到達數組頭部或者以前元素的值小於當前元素 33 arr[j] = arr[j - 1];// 若是以前的元素比當前元素大就把以前的元素向後移動一格位置(實際上是複製到後面一格位置,可是不用清除以前的位置,由於再以前的元素也可能會覆蓋這個位置),直到到數組頭部或者找到了一個比當前元素小的位置 34 j--; 35 } 36 arr[j] = value;// 找到的這個位置的元素已經向後移動了一個格子,找到的這個位置就是當前元素應該要插入到的位置 37 } 38 } 39 }