java 排序算法---插入排序

一直觉得排序是一个很高深的东西,也一直是自己的一个劣势,前两天无意间发现了一篇blog  写关于java的最基本的几个排序算法,自己就看了看,觉得理解的差不多了。留点笔记记录一下。

我理解的插入排序:插入排序就是往已排好的顺序里面插入到相应的位置,其实换个思路挺好理解的,大学军训的时候,教官已经把你们按照按照身高排好队了,从做到右依次增高,也就是左边同学的个子矮的,右边的同学个子高些。这个时候一个同学迟到了,总不能因为迟到了就不让参加军训吧,可是还得按照身高排序,怎么办呢?那就让从尾开始一个一个比谁高呗,比他高的往右挪一个位置,再和第二个进行比较,还高,那就往右挪,这样一个一个比,总会找到一个比他矮的,如果一个都没有找到,那么排头的位置就是他的。

插入思想差不多就是这样的。没有排好的队伍,也有排头的,他先是一个临时的排头,第二个和他比较,他个高,往右站,第二个当排头,这样前两个就排好了,第三个再开始继续和前两个比较,这样每来一个,最多一个循环,就能排好队伍了。


具体代码如下


public int[] sortInsert(int[] array) {
    int length = array.length;
    for (int i = 1; i < length; i++) {//从第二个开始,因为第一个已经排好队了
        int temp = array[i];//保存这个位置对应的数字temp
        int j = i - 1;//与这个坐标前面的进行比较
        //循环开始之前,i之前的数字是已经是按照从小到大的顺序排好的
        //循环的目的是为了找到一个位置,这个位置之前的数都小于temp ,这个位置之后的数都大于temp
        for (; j >= 0 && array[j] > temp; j--) {//如果他之前的值比temp 大,那么就让这个值放到他之后的位置上,
            array[j + 1] = array[j];
        }
        //循环结束后,就能得到 位置之前的数都比temp 小,temp 就在这个位置上
        array[j + 1] = temp;
    }
    return array;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值