📅  最后修改于: 2023-12-03 15:27:11.187000             🧑  作者: Mango
本文将介绍一种用于插入排序的 Java 程序,让程序员能够更好地理解和应用这一排序算法。本篇文章中所用到的 Java 语言是标准版(SE)的 Java 8。
插入排序是一种简单直观、易于实现的排序算法,主要思想是通过扫描未排序的序列,将每个元素插入到已排序的序列中的适当位置。像冒泡排序和选择排序一样,插入排序的时间复杂度为 $O(n^2)$,因此不适用于大规模数据。
下面是一个用于插入排序的 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 程序可以帮助程序员更好地理解和应用该排序算法。