算法學習記錄3 插入排序

本身的理解

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 }
View Code
相關文章
相關標籤/搜索