📜  Java程序进行递归插入排序(1)

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

Java程序进行递归插入排序

递归插入排序是插入排序的一种改进版本,它采用递归的方式实现元素的插入和排序。与迭代版的插入排序相比,递归版的插入排序代码通常更加简洁,但由于递归带来的额外开销,它的性能可能会略逊一筹。

下面我们来介绍一份用Java语言实现的递归插入排序程序。

程序实现

首先,我们需要实现一个递归函数,用于将第 n 个元素插入到前 n-1 个元素中已经排好序的序列中:

public class RecursiveInsertionSort {
    public static void sort(int arr[], int n) {
        // Base case - 最后一个元素已经排序完成
        if (n <= 1) {
            return;
        }

        // 对前 n-1 个元素进行排序
        sort(arr, n - 1);

        // 将第 n 个元素按顺序插入到前 n-1 个元素中
        int last = arr[n - 1];
        int j = n - 2;

        // 移动比 arr[n-1] 大的元素到下一个位置
        while (j >= 0 && arr[j] > last) {
            arr[j + 1] = arr[j];
            j--;
        }

        // 将 arr[n-1] 插入到正确的位置
        arr[j + 1] = last;
    }
}

然后,我们可以在 main 函数中调用 above 函数,并列印出排序结果:

public static void main(String args[]) {
    int arr[] = { 12, 11, 13, 5, 6 };
    int n = arr.length;

    RecursiveInsertionSort.sort(arr, n);

    System.out.println("Sorted array:");
    for (int i = 0; i < n; i++) {
        System.out.print(arr[i] + " ");
    }
}
程序解释

当执行 sort 函数时,如果传入的数组只有一个元素或者没有元素,则递归终止,直接返回。否则,程序会先对前 n-1 个元素进行排序,再将第 n 个元素插入到已排序的序列中。

以上实现代码没有实现多线程,因此递归插入排序代码的执行效率会受到递归的深度限制。如果使用多线程,则可以同时递归多个部分,从而加快排序的速度。

程序测试

我们可以将以上代码拷贝到一个 Java 项目中,并执行 main 函数,测试排序结果。输入为 { 12, 11, 13, 5, 6 } 的数组,排序结束后应该输出:

5 6 11 12 13
总结

递归插入排序是一种有效的排序算法,它可以通过递归方式遍历和排序元素。与标准插入排序相比,递归插入排序可能更加简洁,但也可能更加慢,特别是在处理大型数据集时。程序员可以根据实际需要来选择适合的算法。