插入排序

插入排序

排序原理:

是通過構建有序序列,對於未排序的數據,在已排序序列中從後向前掃描,找到相應的位置並插入.插入排序在實現上,再從後往前掃描過程中,需要反覆把已排元素逐步向後挪位,爲最新元素提供插入空間.

過程分析:

  1. 首先我們選定一個索引,假設其左邊元素是有序的,用索引上元素和它左邊的元素從右往左比較.
    在這裏插入圖片描述

  2. 如果左邊的元素大於取出的元素,那麼將這個元素右移一位,此時2已經比到最左邊停止比較,將2 空位上,再將空位索引右移.
    在這裏插入圖片描述

  3. 經過上步得到下面的結果,這時空位左邊兩個元素已經有序了,再將空位元素取出,向左比較.遇到大的將其右移一位,遇到小的停止比較,將6放在空位上.
    在這裏插入圖片描述

  4. 經過上一步得到結果如下.
    ]

  5. 這時空位上取出元素爲5,依次和左邊元素比較.直至遇到小於5的數,或者到了最左邊.
    ]
    ]
    ]
    在這裏插入圖片描述

  6. 經過上面處理,已經有5個元素有序.
    ]
    ]
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

代碼實現:

public class Test3 {
    public static void main(String[] args) {

        int [] arr = {9,2,6,7,5,8,4,1};

        //外層向右的index,即作爲比較對象的數據的index
        for(int i = 1; i<arr.length; i++){
            //用作比較的數據
            int temp = arr[i];
            int j = i-1;
            //當比到最左邊或者遇到比temp小的數據時,結束循環
            while(j>=0 && arr[j]>temp){
                arr[j+1] = arr[j];
                j--;
            }
            //把temp放到空位上
            arr[j+1] = temp;
            //打印每次內層循環完結果
           System.out.println(Arrays.toString(arr)); 
        }
        System.out.println(Arrays.toString(arr));
    }
}

結果:

[2, 9, 6, 7, 5, 8, 4, 1]
[2, 6, 9, 7, 5, 8, 4, 1]
[2, 6, 7, 9, 5, 8, 4, 1]
[2, 5, 6, 7, 9, 8, 4, 1]
[2, 5, 6, 7, 8, 9, 4, 1]
[2, 4, 5, 6, 7, 8, 9, 1]
[1, 2, 4, 5, 6, 7, 8, 9]
[1, 2, 4, 5, 6, 7, 8, 9]

小結:

選取一個索引A,假設其左邊元素是有序的,將其拿出來,這時數組就會出現一個空位,
我們將取出來的元素與他左邊元素從右往左比較,遇到比它大的,那麼將這個元素右移一位,
如此下去,直到取出的元素遇到比它小或者比到了最左端,即停止,再將取出元素放回當前空位(即符合它的插入位置),
同時A索引右移一位.這樣一輪下來,索引左邊的元素就是有序的按照這種思想下去就可以完成排序.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章