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

直接插入算法

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

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

图解

这是一个待排序的数组。


待排序数组.png

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


Java排序算法 - 直接插入排序_第1张图片
待排序.png

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


Java排序算法 - 直接插入排序_第2张图片
待排序.png

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

Java排序算法 - 直接插入排序_第3张图片
待排序.png

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


Java排序算法 - 直接插入排序_第4张图片
完成.png

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


Java排序算法 - 直接插入排序_第5张图片
下一轮.png

完整代码如下:

/**
 * Created by ShouJingGuo on 2018/3/14.
 * 直接插入排序
 */
public class InsertSort {
    public static  void insertSort(T[] arr, Comparator 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排序算法 - 直接插入排序)