排序算法之插入排序

参考:https://www.runoob.com/w3cnote_genre/algorithm

插入排序

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

1、声明一个循环变量i,初始值为1,小于数组长度
2、声明一个临时变量tmp,赋值为数组下标为i的元素
3、创建一个循环变量j,初始值为i
4、判断条件:j>0且tmp小于数组下标为j-1的元素,如果不满足则跳过第五步
5、对数组下标为j赋值为下标为j-1,并对j减一
6、如果j不等于i,将数组下标为j赋值为tmp

public int[] sort(int[] sourceArray) throws Exception {
    // 对 arr 进行拷贝,不改变参数内容
    int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
    // 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
    for (int i = 1; i < arr.length; i++) {
        // 记录要插入的数据
        int tmp = arr[i];
        // 从已经排序的序列最右边的开始比较,找到比其小的数
        int j = i;
        while (j > 0 && tmp < arr[j - 1]) {
            arr[j] = arr[j - 1];
            j--;
        }
        // 存在比其小的数,插入
        if (j != i) {
            arr[j] = tmp;
        }
    }
    return arr;
}
原文地址:https://www.cnblogs.com/heibaimao123/p/13778407.html