java 如何在java中将数组分成两半

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/28887966/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 14:20:29  来源:igfitidea点击:

How To Split an Array in half in java

javaarrayssorting

提问by user3012019

I need to split this array after it is sorted so that it prints something like

我需要在排序后拆分这个数组,以便它打印出类似的东西

A: [8, 7, 6, 5]

答: [8, 7, 6, 5]

B: [4, 3, 2, 1]

B: [4, 3, 2, 1]

I know it might be simple but I cant figure it out. Do I need to do something like x.length / 2 ?

我知道这可能很简单,但我无法弄清楚。我需要做类似 x.length / 2 的事情吗?

 import java.util.Arrays;


public class RecursiveMerge
{

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int [] x= {8,7,5,6,2,4,3,1};
    System.out.println(Arrays.toString(x));
    System.out.println(Arrays.toString(mergeSort(x)));



}

public static int [] mergeSort (int []a)
{
    if(a.length ==1)
        return a;
    else
    {
    int mid =  a.length/2;
    int [] left =mergeSort(Arrays.copyOfRange(a, 0 , mid ));
    int [] right =mergeSort(Arrays.copyOfRange(a, mid, a.length ));

    mergeSort(left);
    mergeSort(right);

    return merge (left, right);
    }
}
public static int[] merge (int[] left, int[] right)
{
int [] result = new int [left.length + right.length];

int leftPtr=0, rightPtr=0, resultPtr=0;


while(leftPtr < left.length && rightPtr < right.length)
    if (left[leftPtr] < right [rightPtr])
        result[resultPtr++] = left[leftPtr++];
    else
        result[resultPtr++] = right[rightPtr++];
while (leftPtr < left.length)
    result[resultPtr++] = left[leftPtr++];
while (rightPtr <right.length)
    result[resultPtr++] = right[rightPtr++];
return result;

}
}

回答by Laerte

To make it dynamically, do it based on array length and split it in two:

要动态制作,请根据数组长度进行操作并将其分成两部分:

int [] x= {8,7,5,6,2,4,3,1};
int len = x.length;

int a[] = Arrays.copyOfRange(mergeSort(x), 0, len/2);
int b[] = Arrays.copyOfRange(mergeSort(x), (len/2), len);

System.out.println("A: " + Arrays.toString(a));
System.out.println("B: " + Arrays.toString(b));

Hope it helps.

希望能帮助到你。