【数据结构与算法】插入排序算法的介绍和程序实现

1. 插入排序的介绍

插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的值依次与有序表元素的值依次进行比较,将它插入到有序表中的适当位置,使之成为新的有序表

2. 插入排序的程序实现

需求:有一组无序的数据{101, 34, 119, 1, -1, 89}; ,请用插入排序算法实现从小到大排列

插入排序算法的时间复杂度和执行时间和选择排序算法差不多

程序如下:

import java.util.Arrays;

public class InsertSort {

    public static void main(String[] args) {
        int[] array = {101, 34, 119, 1, -1, 89};

        // 进行插入排序
        insertSort(array);

        System.out.println("排序后:");
        System.out.println(Arrays.toString(array));
    }

    // 插入排序
    public static void insertSort(int[] array) {
        int insertValue = 0;
        int insertIndex = 0;
        // 用于控制遍历多少轮。从1开始,因为此时index=0的相当域有序表,index >=1的相当于无序表
        for (int i = 1; i < array.length; i++) {
            // 定义待插入的数
            insertValue = array[i];
            // 有序表的最大index
            insertIndex = i - 1;

            // 应该插入到的位置必须大于等于0,且待插入的数小于有序表当前index的数
            while (insertIndex >= 0 && insertValue < array[insertIndex]) {
                // 则将应该插入到的位置的数进行后移
                array[insertIndex + 1] = array[insertIndex];
                // 同时对应该插入到的位置进行前移,以便进行前面较大的数后移操作
                insertIndex--;
            }

            // 如果待插入的数的新位置,和旧的位置不一样
            if (insertIndex + 1 != i) {
                // 则将新位置的数置为待插入的数
                array[insertIndex + 1] = insertValue;
            }
        }
    }

}

运行程序,结果如下:

排序后:
[-1, 1, 34, 89, 101, 119]

猜你喜欢

转载自blog.csdn.net/yy8623977/article/details/126683330