合并排序应用程序
|
我正在做一个练习,给定一个N值数组,我需要获得两个数字,它们的减法(最高-最低)是最正数。我希望v大于c ...情况是...假设我想以价格C购买拍卖,因此我可以以价格V出售它们并获得最大利润,并且array是第t天拍卖的价格,因此我想以可能的最低价格购买,以便我可以以最高的价格出售,因此C必须在数组中的V之前出现。例如:
n = 8
arr = {6,7,3,8,9,2,1,4,20}
我想要c = 1
和v = 20
,因为20 - 1 = 19
(这意味着从这2个数字中减去最高)
另一个例子:
n = 6
arr = {8,12,45,40,18,29}
我想要c = 8
和v = 45
,因为它们的减法是所有其他减法中最高的。 (我想澄清一下,c并不总是数组中最小的数字)。这两个数字不需要彼此相邻。如果我有n = 1, {1}
,则c = 1
和v = 1
。
此示例说明c和v并不总是最低/最高值。
n = 6
arr = {19,27,5,6,7,8}
在这种情况下,c = 19
和v = 27
另外,我需要使用合并排序的代码解决许多问题(示例将其分为两种方法:可以处理递归的mergesort和使用aux数组进行位置更改的合并)。
我正在使用mergesort代码(我认为合并是不必要的,因为我不在乎排序),到目前为止,我有以下代码,但显然是错误的,有人可以告诉我我在做什么对?
public static void mergeSort(int start, int end) {
if(start < end) {
int half = (start + end) / 2;
mergeSort(start, half);
for(int i = start; start < half; start++, i++){
if((arr[i+1] - arr[i]) > temp){
temp = arr[i+1] - arr[i];
c = i;
v = i+1;
}
}
mergeSort(half+1, end);
for(int i = half+1; i < end; half++, i++){
if((arr[i+1] - arr[i]) > temp){
temp = arr[i+1] - arr[i];
c = i;
v = i+1;
}
}
}
}
在此先感谢您提供的任何帮助!
没有找到相关结果
已邀请:
1 个回复
芳菱挨啡
是继承的。 既然已经进行了递归,则无需遍历所有元素,因为在递归之后,结果已经呈现出来了。例如,一种可能的方法是将最小值交换到第一位,将最大值交换到最后一位,然后,在“上”递归级别上,您可以直接检索它们。 这是利用合并排序原理的另一种解决方案,但仅返回最大值。