美文网首页Java排序算法
Java排序算法 - 直接插入排序

Java排序算法 - 直接插入排序

作者: 守敬 | 来源:发表于2018-03-19 17:43 被阅读0次

    直接插入算法

    顾名思义,就是在有序数组中适当的位置插入元素。

    算法思路:把待排序的数组,第0位的元素看做是一个排好序的数组,之后用temp记录数组的第1位,与前面的元素依次进行比较,如果小于前面的元素,那么就将前面的元素赋值给后边的元素,直到temp小于前面的某一个元素位置,将temp赋值给该位置。之后重复操作,将所有元素插入到适合的位置。

    图解

    这是一个待排序的数组。


    待排序数组.png

    发现23比28小,需要将23插入到前面适当的地方。


    待排序.png

    用temp记下23这个值,避免了交换元素浪费时间,这样直接赋值就好。将28赋值到23的位置。之后蓝色标志位向前移动,比较26与temp的大小。


    待排序.png

    结果发现26也大于23,将26向后一位赋值。蓝色标前移。

    待排序.png

    比较发现20小于23,所以temp就应该插在20的后面。


    完成.png

    之后红色标识后移一位,蓝色标志移动到红色前一位,temp = 28,重复操作。


    下一轮.png

    完整代码如下:

    /**
     * Created by ShouJingGuo on 2018/3/14.
     * 直接插入排序
     */
    public class InsertSort {
        public static <T> void insertSort(T[] arr, Comparator<T> comparator){
            for(int i = 1; i < arr.length; i++){
                T temp = arr[i];
                int j = i - 1;
                while((j >= 0) && (comparator.compare(arr[j], temp) > 0)){
                    arr[j+1] = arr[j];
                    j--;
                }
                arr[j+1] = temp;
            }
        }
    
        public static void main(String[] args) {
            Integer arr[] = {10,50,24,11,68,20,41,0,24,25,4,7,94,15,5,44,66};
            InsertSort.insertSort(arr, new IntegerComparator());
            System.out.println(Arrays.toString(arr));
        }
    }
    

    相关文章

      网友评论

        本文标题:Java排序算法 - 直接插入排序

        本文链接:https://www.haomeiwen.com/subject/zslyqftx.html