排序算法之插入排序

27 阅读1分钟

插入排序的通俗解释

字面意思就是找到合适的位置插入数据,过程是什么样的呢,以正序排序为例,就是从第二个数据开始,不断的和它前面的数据比较,如果数据小于它前面的数据,那么它前面的数据就向后移动到它的位置,然后第二个数据往前移动一下,继续比较它前面的数据,如果前面的数据小于等于我这个第二个数据的话,那么当前位置就是合适的位置,直接赋值,继续第三个数据,第四个数据,直到遍历完成。

算法执行过程动图展示

插入排序.gif

算法实现

public static void main(String[] args) throws Exception {
    int[] data = new int[]{4,3,2,6,1,8,5,4,10,9};
    sort(data);
    System.out.println(Arrays.toString(data));
}

public static void sort(int[] data){
    for (int i = 1; i < data.length; i++) {
        //比较值的index
        int tempIndex = i;
        //比较值的数据
        int tempData = data[i];
        for(int j=i-1;j>=0;j--){
            //如果比较小于前面的,前面的数据后移,比较值的index前移,继续比较
            if(tempData<data[j]){
                data[tempIndex] = data[j];
                tempIndex--;
            }else{
                //如果比较直大于等于前面的,那么当前的index直接插入比较的数据
                data[tempIndex] = tempData;
            }
        }
        //如果比较的index到了边界,那就说明和第一个已经比较完了,直接赋值就行了
        if(tempIndex==0){
            data[tempIndex] = tempData;
        }
    }
}