递归算法找到数组中的最小元素
Posted
技术标签:
【中文标题】递归算法找到数组中的最小元素【英文标题】:recursive algorithm to find smallest element in array 【发布时间】:2012-03-16 11:02:00 【问题描述】:我有一些递归算法的伪代码,可以在数组中找到最小的数。
这是算法。
Min(A[0..n - 1])
If n = 1 return A[0]
else
temp <-- Min(A[0..n - 2])
if temp <= A[n - 1]
return temp
else return A[n - 1]
我不理解这个伪代码的一部分是“temp
我的另一个问题是如何在代码中实现该行。我正在使用 Java。
提前感谢您的帮助。
【问题讨论】:
每次递归都需要离递归结束更近一次。 (当你只有一个元素时) 感谢您的回复。我将如何实现这个伪代码?不清楚我将如何处理代码中的那一行。 【参考方案1】:因为您的数组索引从 0 到 n-1,包括在内。您需要递归一个元素较小的子数组,因此是 n-2。
【讨论】:
【参考方案2】:我的另一个问题是如何在代码中实现该行。
如果您使用的是数组。
// create an array with one less element.
A a2 = new A[a.length-1];
// copy the elements
System.arrayCopy(a,0,a2,0,a2.length);
如果您使用的是列表
List<A> a2 = a.subList(0, a.length-1);
【讨论】:
【参考方案3】:对于您的第一个问题:
由于您使用的是递归算法,因此为了解决问题,您首先必须以较小的大小解决相同的问题。在这个伪代码中,为了找到长度为 n 的数组的最小值,首先找到大小为 n-1 的同一数组的最小值,然后将最小值与第 n 个元素进行比较。您的数组的索引从 0 到 n-1(这将使其长度 = n),因此对于递归调用,您必须从索引 0 到 n-2(n-1 个元素)调用数组。
对于您的第二个问题: 这就是我在 Java 中实现代码的方式:
public class Minimum
public Minimum(int[] A)
findMin(A, 0, A.length-1);
public int findMin(int [] A, int start, int end)
if (start== end-1)
return A[0];
else
int temp=findMin(A, start, end-1 );
if (temp<=A[end])
return temp;
else
return A[end];
【讨论】:
这是你询问的那一行 ->int temp=findMin(A, start, end-1 );
以上是关于递归算法找到数组中的最小元素的主要内容,如果未能解决你的问题,请参考以下文章