數據結構學習(九):插入排序

一、思想

把n個待排序的元素看成一個有序表和一個無序表,開始時有序表中只有一個元素,無序表中包含有n-1個元素,排序過程中每次從無序表中取出第一個元素,把它的排序依次將有序元素的排序碼進行比較,將它插入到有序表中的適當位置,使之成爲新的有序表。

第1趟排序後的數組:
[101, 34, 119, 1]
第2趟排序後的數組:
[34, 101, 119, 1]
第3趟排序後的數組:
[34, 101, 119, 1]
第4趟排序後的數組:
[1, 34, 101, 119]

二、代碼

public static void insertSort(int[] arr) {
        //第1輪 {101, 34, 119, 1}-> {34,101, 119, 1}

        for (int i = 0; i < arr.length; i++) {
            //定義待插入的數
            int insertVal = arr[i];
            //即待插入的數的前面的數的下標
            int insertIndex = i - 1;

            //1.insertIndex >= 0 保證在給insertVal找插入位置,不越界
            //2.insertVal < arr[insertIndex] 說明待插入的數,還沒有找到插入的位置
            //3.所以需要將arr[insertIndex]後移
            while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
                arr[insertIndex + 1] = arr[insertIndex];
                insertIndex --;
            }

            //當退出while循環時,說明插入的位置找到,insertIndex + 1
            if(insertIndex + 1 != i) {
                arr[insertIndex + 1] = insertVal;
            }

            System.out.println("第"+ (i + 1) +"趟排序後的數組:");
            System.out.println(Arrays.toString(arr));
        }


    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章