【图解算法】排序算法——插入排序

插入排序(insertion sorting)

大体含义是这样的,想我们在打扑克牌理牌时的思路一样,来一张扑克牌做一次插入操作。

这里写图片描述

下面我们给出普通版和优化版的插入排序

    public int [] insertionSort(int [] arr){
        for (int i = 1; ifor (int j = i; j>0 && arr[j] < arr[j-1];j--){
                int temp = arr[j];//循环比较两个相邻的值,满足排序条件做交换,不满足跳出当前这层循环
                arr[j] = arr[j-1];
                arr[j-1] = temp;
            }
        }
        return arr;
    }

    public int [] insertionSortPlus(int [] arr){
        for (int i = 1; iint x = arr[i]; //记录当前抽的数
            int j;          //记录数的位置
            for (j = i; j>0 && arr[j-1] >x;j--){
                arr[j] = arr[j-1];//挪位置
            }
            arr[j] = x;     //最后处理当前抽的数的位置归宿 需要注意的是这里的 j 是上面 for 循环退出时的值
        }
        return arr;
    }

优化版的算法主要在于交换的次数上的优化,在数组本身的顺序较为良好的情况下,这种插入排序的优势可以体现出来,因为不用向冒泡或是选择排序那样必须走完内层循环,找到一个合适的时机可以提前跳出内层循环。

图解算法目录

【图解算法】排序算法——冒泡排序、选择排序

【图解算法】排序算法——插入排序

【图解算法】排序算法——归并排序

【图解算法】排序算法——快速排序

【图解算法】Java GC算法

【图解算法】排序算法——堆排序

【图解算法】并查集 —— 联合查找算法

【图解算法】排序算法——计数排序

Gif Power By https://visualgo.net

你可能感兴趣的:(算法,图解算法,插入排序,算法,排序算法)