# Sorting an Integer array

Posted on

Problem

The program sorts the array from lowest to highest and outputs the index of the searched value:

``````public static void main(String[] args) {

Integer[] random = {6, -4, 12, 0, -10};
List<Integer> list = new ArrayList<Integer>(Arrays.asList(random));
Collections.sort(list);
Integer[] array = list.toArray(new Integer[list.size()]);

int y = Arrays.binarySearch(array, 6);
System.out.println(y);

}
``````

This works as expected, but you can see that I had to use 3 lines just to sort the array, before being able to do a `binarySearch` on it.

Can this code be improved?

Solution

As you say, this is wrong. This

``````Integer[] random = {6, -4, 12, 0, -10};
List<Integer> list = new ArrayList<Integer>(Arrays.asList(random));
Collections.sort(list);
Integer[] array = list.toArray(new Integer[list.size()]);
``````

could be replaced by

``````Integer[] random = {6, -4, 12, 0, -10};
List<Integer> list = Arrays.asList(random);
Collections.sort(random);
``````

where `Arrays.asList` just wraps the array without making a copy. Even better would be

``````Integer[] random = {6, -4, 12, 0, -10};
Arrays.sort(random);
``````

Also note that sorting something just in order to be able to use binary search once makes no sense.

Also note that

``````Integer[] random = {6, -4, 12, 0, -10};
``````

uses objects wrapping the `int`, while

``````int[] random = {6, -4, 12, 0, -10};
``````

would be much more efficient.

Boxing the `int`s and creating a `List` are both superfluous. You can just `sort` an array of `int`s.

``````int[] array = {6, -4, 12, 0, -10};
Arrays.sort(array);
System.out.println(Arrays.binarySearch(array, 6));
``````

If your goal is to obtain the approximate rank of an element, it would be faster just to count the elements that are smaller.