user3012019
user3012019

Reputation: 75

How To Split an Array in half in java

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

A: [8, 7, 6, 5]

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 ?

 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;

}
}

Upvotes: 5

Views: 22392

Answers (2)

HellishHeat
HellishHeat

Reputation: 2491

An edit to the accepted answer could take into account that half an odd numbered int is actually the nearest, smaller, whole number, to the half. So, something like this is more appropriate:

int size = array.size();
int half = size % 2 == 0 ? size / 2 : (size / 2) + 1;

Upvotes: 0

Laerte
Laerte

Reputation: 7083

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.

Upvotes: 7

Related Questions