插入排序

算法步骤

将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

动图演示

img代码实现

    public void insertSort(int[] arr) {
        //默认arr0 左侧为已排序区间,右侧是未排序区
        
        // 从排好序的数组最右边开始排序
        for (int i = 1; i < arr.length; i++) {
            // 记录当前需要进行插入到排好序列表的值
            int tmp = arr[i];
            int j = i - 1;
            while (j >= 0 && tmp< arr[j]) {
                arr[j + 1] = arr[j];// 后移一位
                j--;
            }
            arr[j + 1] = tmp;// 插入
        }
    }

算法思路

img

算法实现:直接插入排序是将无序序列中的数据插入到有序的序列中,在遍历无序序列时,首先拿无序序列中的首元素去与有序序列中的每一个元素比较并插入到合适的位置,一直到无序序列中的所有元素插完为止。对于一个无序序列arr{4,6,8,5,9}来说,我们首先先确定首元素4是有序的,然后在无序序列中向右遍历,6大于4则它插入到4的后面,再继续遍历到8,8大于6则插入到6的后面,这样继续直到得到有序序列{4,5,6,8,9}。

posted @ 2021-10-28 17:45  志旋  阅读(41)  评论(0)    收藏  举报