合并排序应用程序

| 我正在做一个练习,给定一个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;
            }
        }
    }
}
在此先感谢您提供的任何帮助!     
已邀请:
        我想代码中的名称
mergeSort
是继承的。 既然已经进行了递归,则无需遍历所有元素,因为在递归之后,结果已经呈现出来了。例如,一种可能的方法是将最小值交换到第一位,将最大值交换到最后一位,然后,在“上”递归级别上,您可以直接检索它们。 这是利用合并排序原理的另一种解决方案,但仅返回最大值。
public class test {
    static int arr [] = {6,7,3,8,9,2,1,4,20};

    public static void main (String args[]) {
        System.out.println(merge_select_max(0, arr.length - 1));
    }

    public static int merge_select_max (int start, int end) { // both inclusive
        if (start == end) {
            return arr[start];          
        }
        else {
            int half = (start + end) / 2;
            int first = merge_select_max (start, half);
            int second = merge_select_max (half + 1, end);
            return (first > second ? first : second);           
        }       
    }
}
    

要回复问题请先登录注册