码迷,mamicode.com
首页 > 编程语言 > 详细

插入排序

时间:2019-05-21 11:08:51      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:system   insets   oid   dex   []   不用   stat   没有   style   

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[]a={100,5,8,9,2,12,3,89,0,65,5,8,12,1};
         a = insetSort(a);
        System.out.println(Arrays.toString(a));

    }

    /**
     * 插入排序法:将数组中其中一个数字拿出来,然后跟下一位进行比较,如果比其小就交换位置,接着继续跟下下位比较,一直找到比它大的位数为止,好比扑克牌整理牌那样,取出一个牌通过比较插到对应位置:
     * 数组:[0,10,6,1,2]
     * 第一轮:取出0,因为没有前一位,所以不用比,所以第一轮从10开始,10跟0比.比它大,所以不用交换,第一轮完成后,结果为[0,10,6,1,2]
     * 第二轮:取出6,然后6跟10比,比它小,交换位置,6继续跟下位0比,比它大,第二轮结束后[0,6,10,1,2]
     * 第三轮:取出1,1跟10比,交换位置,1继续跟6比,交换位置,1最后跟0比,比它大,不用交换,第三轮结束后[0,1,6,10,2]
     * 第四轮:取出2,2跟10比,交换位置,2跟6比交换位置,2跟1笔,不用交换[0,1,2,6,10],此时比较完毕,也排序完了
     * 总结:数组从索引为1起的数都要拿出来,然后跟前面的数据比,直到遇到比它大的为止
     * @param arr
     * @return
     */

    public static  int[] insetSort(int arr[])

    {
        if(null==arr || arr.length==0){
            return arr;
        }
        for (int i = 1; i < arr.length; i++) {
            //需要取出来插到其他位置的数字
            int insertNumber=arr[i];
            //下一位的索引
            int index=i-1;
            while (index>=0 && insertNumber<arr[index]){ //如果下一位的索引还没越界(小于0),则取出的数字跟下一位比较,如果小的话,下一位数字就往后移动一位
                arr[index+1]=arr[index];//index上的数据往后移动一位,此时取出的数据(insertNumber)可以占用该位置了,因为还要跟下下位比较,所以此处先不写arr[index]=insertNumber
                index--;//下标继续往下位移动
            }
            arr[index+1]=insertNumber;//当都比较完后,index就是insertNumber的位置了,因为循环里比较完后,index-1了,所以这里要加1,即时没有进入while循环,这里就index+1就是i了,相当于自己赋值给自己

        }
        return arr;

    }

}

 

插入排序

标签:system   insets   oid   dex   []   不用   stat   没有   style   

原文地址:https://www.cnblogs.com/yangxiaohui227/p/10898282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!