我一直在寻找递归选择排序,只使用2个参数:
示例: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来帮助我,那将会非常有用
答案 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)
首先对您的代码发表一些评论:
sort
和selectionSort
不需要返回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代码。