数据结构学习(九):插入排序

一、思想

把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));
        }


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