📜  用于插入排序的Java程序(1)

📅  最后修改于: 2023-12-03 15:27:11.187000             🧑  作者: Mango

用于插入排序的 Java 程序

本文将介绍一种用于插入排序的 Java 程序,让程序员能够更好地理解和应用这一排序算法。本篇文章中所用到的 Java 语言是标准版(SE)的 Java 8。

插入排序简介

插入排序是一种简单直观、易于实现的排序算法,主要思想是通过扫描未排序的序列,将每个元素插入到已排序的序列中的适当位置。像冒泡排序和选择排序一样,插入排序的时间复杂度为 $O(n^2)$,因此不适用于大规模数据。

用 Java 实现插入排序

下面是一个用于插入排序的 Java 程序,其中采用了泛型(Generic)的方式,可以适用于不同类型的数据。

public class InsertionSort<T extends Comparable<T>> {
    public void sort(T[] arr) {
        int n = arr.length;
        for (int i = 1; i < n; ++i) {
            T key = arr[i];
            int j = i - 1;

            /* 将 arr[0..i-1] 大于 key 的元素向右移动一位 */
            while (j >= 0 && arr[j].compareTo(key) > 0) {
                arr[j + 1] = arr[j];
                j = j - 1;
            }
            arr[j + 1] = key;
        }
    }
}

该程序中的类名为 InsertionSort,使用泛型 T 来表示数据类型(需要实现 Comparable 接口)。其中的 sort 方法就是使用插入排序来对传入的数组进行排序。我们可以使用该方法来排序整型,例如:

public static void main(String[] args) {
    Integer[] arr = {45, 22, 68, 8, 10, 3};
    InsertionSort<Integer> sorter = new InsertionSort<>();
    sorter.sort(arr);
    System.out.println("排序结果:" + Arrays.toString(arr));
}

运行结果如下:

排序结果:[3, 8, 10, 22, 45, 68]
算法分析

插入排序算法的时间复杂度为 $O(n^2)$,其中 n 为数据量。具体来说,最好的情况下(即数据已经有序),时间复杂度为 $O(n)$,而最坏的情况下(即数据逆序),时间复杂度为 $O(n^2)$。插入排序算法的空间复杂度为 $O(1)$,即仅占用常量级别的辅助空间。

总结

插入排序是一种简单易懂、易于实现的排序算法,适用于数据量较小的排序任务。本文中所介绍的 Java 程序可以帮助程序员更好地理解和应用该排序算法。