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

来源:互联网 发布:php截断上传 编辑:程序博客网 时间:2024/06/05 09:27

插入排序(insertion sorting)

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

这里写图片描述

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

    public int [] insertionSort(int [] arr){        for (int i = 1; i<arr.length;i++){            for (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; i<arr.length;i++){            int 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;    }

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

原创粉丝点击