java - 递归选择排序Java

标签 java recursion pseudocode selection-sort

我一直在寻找递归选择排序,只使用 2 个参数:

  • 需要排序的数组
  • 一个值k,表示直到 必须对其进行排序的元素。

示例:SelectionSort(array[] a, int k) 当 a 为 {6,3,5,7,2} 并且 k 为 2 时,将对前 3 个元素进行排序,并保持最后一个元素不变。

我正在考虑从 k 为 0 的 if 语句开始,如果是这种情况,它只会按原样返回数组,因为您无法对大小为 1 的数组进行排序。 像这样的东西:

public int[] sort(int[] a){
    a = selectionSort(a, n-1);
    return a;
}

public int[] selectionSort(int[] a, int k){
    if (k = 0){
        return a;
    }
    else{
        selectionSort(a, k-1 );
               ... (part i really don't know)
}

我不知道如何做“其他”部分,因为我只知道它必须再次调用该方法。 我不允许创建其他方法。我还需要确保我使用了 2 个参数,不多也不少。

我必须用伪代码来解决这个问题,但我了解一些 Java,所以如果有人可以通过使用伪代码或 Java 来帮助我,那将非常有帮助

最佳答案

首先对您的代码做一些说明:

  • 您的方法 sortselectionSort 不需要返回 int[] 数组, 因为数组对象 a 始终保持不变。 只有这个数组中的内容发生了变化。 因此,您可以使用 void 作为返回类型。
  • 在您的 if 中使用 (k == 0) 而不是 (k = 0)

您已经了解了第一部分。 下面是如何用伪代码完成第二部分:

public void selectionSort(int[] a, int k) {
    if (k == 0) {
        return;
    }
    else {
        selectionSort(a, k-1 );
        find x such that a[x] is the smallest of a[k] ... a[a.length - 1]
        if (a[k-1] > a[x]) {
            swap a[k-1] and a[x]
        }
    }
}

我相信您能够将伪代码提炼成真正的 Java 代码。

关于java - 递归选择排序Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50552735/

相关文章:

java - 与 ArrayList 结合使用时可搜索的 ListView

c - 将两个已排序的链表合并为一个链表(递归)

sql-server - SQL Server 递归存储过程

algorithm - k = 4时k元搜索算法的操作次数?

java - 理解 Donald B. Johnson 算法中的伪代码

java - 使用 while 循环而不是 for 循环创建二维数组以提高运行时效率

java - 如何为 IntelliJ 设置 Scala API 文档

java - 使用 Java 自动完成句子

c++ - 理解这个递归函数

java - 用户注册时如何在服务器上创建目录?