插入排序

算法思想:

每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

算法实例:

package com.lanhuigu.algotithm.sort;

import java.util.Arrays;

/**
 * 插入排序算法
 * @author yihonglei
 * @date 2018/11/18 10:42
 */
public class InsertSortTest {

    public static void main(String[] args) {
        // 定义数组
        int[] arr = {3, 1, 4, 5, 2, 8};
        System.out.println("排序前数组:" + Arrays.toString(arr));

        // 调用插入排序算法
        insertSort(arr);

        System.out.println("排序后数组:" + Arrays.toString(arr));

    }

    /**
     * 插入排序算法
     * @author yihonglei
     * @date 2018/11/18 11:17
     * @param arr
     * @void
     */
    public static void insertSort(int[] arr) {
        // 遍历所有的数字,下标从第二个数字下标位置开始
        for (int i = 1; i < arr.length; i++) {
            // 把当前元素取出来
            int tmp = arr[i];
            // 如果当前数字小于前一个数字
            if (tmp < arr[i-1]) {
                int j;
                /*
                 遍历比当前元素小的前面所有数字,如果前面的数字比当前元素大,则需要往后移动。
                 */
                for (j = i - 1; j >= 0 && tmp < arr[j]; j--) {
                    // 大数字往后移动一个位置
                    arr[j+1] = arr[j];
                }
                /*
                当前一个元素比tmp小时,上面大数字移动的for循环结束,这个时候需要将tmp赋值给
                循环结束位置的后一个元素,即小数字的后一个元素。
                */
                arr[j+1] = tmp;
            }
        }
    }

}

运行结果:

插入排序

算法分析:

插入排序

插入排序