递归选择排序Java

时间:2018-05-27 13:40:57

标签: 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来帮助我,那将会非常有用

2 个答案:

答案 0 :(得分:1)

编辑:OP澄清了这个问题,这可能与OP无关,但可能对未来的访问者而言。

请记住下次对您的问题的评论。就这一次,我会帮助你,因为你是新人。通过简单的谷歌搜索,我在this site找到了下面代码的最大部分。我自己添加了selectionSort方法以适合您的参数。请注意,Stack Overflow不是代码编写服务(即使人们经常提供代码,但这不是答案中的要求)。

    public void selectionSort(int a[], int n) 
    {
      recurSelectionSort(a, n, 0);
    }

    // Recursive selection sort. n is size of a[] and index
    // is index of starting element.
    static void recurSelectionSort(int a[], int n, int index)
    {

        // Return when starting and size are same
        if (index == n)
           return;

        // calling minimum index function for minimum index
        int k = minIndex(a, index, n-1);

        // Swapping when index nd minimum index are not same
        if (k != index){
           // swap
           int temp = a[k];
           a[k] = a[index];
           a[index] = temp;
        }
        // Recursively calling selection sort function
        recurSelectionSort(a, n, index + 1);
    }

    // Return minimum index
    static int minIndex(int a[], int i, int j)
    {
        if (i == j)
            return i;

        // Find minimum of remaining elements
        int k = minIndex(a, i + 1, j);

        // Return minimum of current and remaining.
        return (a[i] < a[k])? i : k;
    }

答案 1 :(得分:1)

首先对您的代码发表一些评论:

  • 您的方法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代码。