Saturday, January 14, 2012

Quite often we need to sort array in Java luckily java.util.Arrays class provide several utility method to sort java array of any type e.g. primitive, object or int, String etc. Arrays is in java.util package and exposed all sorting related method as static utility functions. you can access sort() as Arrays.sort() and just pass your array and it will sort that array object. You can sort array in ascending order, descending order or any custom order defined by custom comparator in Java. In last article we have seen how to Sort ArrayList in Java and in this java article we will see examples of sorting array in ascending order, descending order and sorting sub arrays in java.

Sort Array in Java on ascending and descending order

Sorting Java Array into Ascending Order:

In order to sort an array (String, int or any type) in ascending order we don't need to to anything special. Arrays.sort() method by default sort elements in there natural order implemented by CompareTo method. String array in Java will be sorted lexicographically. integer will be sorted numerically ascending order. look on code section for complete example of how to sort java array into ascending order. You can also sort anonymous array in Java by this method but since you don’t have any name to refer that it doesn’t make much sense.

Sorting Java Array into Descending Order:

In order to sort a java array into descendingorder you need to provide an external Comparator in Java which can sort elements in there reverse order and luckily we have that built int as java.util.Collections.reverseOrder(), which returns a reverse order comparator which gives reverse of natural ordering of element objects. pass this reverse comparator to sort method and it will sort array into descending order as shown in code example on last section. There is another way in which you can convert Array into ArrayList and than sort the arraylist but that’s again a two step process so its better to sort array using Arrays.sort() method

Sorting Sub Array in Java

Arrays class also provide methods to sort part of java array or sub array. So in case if you have big array and you only need to sort a particular section than just provide start index and end index to java.util.Arrays.sort(array,index,index) and it will sort the array only for that range. this is much faster than sorting whole array and than getting a range of values out of it. here is code example of sorting part of array in Java:

Code Example of Sorting Array in Java

In this section of code example we will see how to sort Java array into ascending order, descending order and sorting sub arrays in Java:

import java.util.Arrays;

import java.util.Collections;

publicclass HashtableDemo {

publicstaticvoid main(String args[]) {

String[] companies = { "Google", "Apple", "Sony" };

// sorting java array in ascending order

System.out.println("Sorting String Array in Ascending order in Java Example");

System.out.println("Unsorted String Array in Java: ");

printNumbers(companies);

Arrays.sort(companies);

System.out.println("Sorted String Array in ascending order : ");

printNumbers(companies);

// sorting java array in descending order

System.out.println("Sorting Array in Descending order in Java Example");

System.out.println("Unsorted int Array in Java: ");

printNumbers(companies);

Arrays.sort(companies, Collections.reverseOrder());

System.out.println("Sorted int Array in descending order : ");

printNumbers(companies);

System.out.println("Sorting part of array in java:");

int[] numbers = { 1, 3, 2, 5, 4 };

Arrays.sort(numbers, 0, 3);

System.out.println("Sorted sub array in Java: ");

for (int num : numbers) {

System.out.println(num);

}

}

publicstaticvoid printNumbers(String[] companies) {

for (String company : companies) {

System.out.println(company);

}

}

}

Output:

Sorting String Array in Ascending order in Java Example

Unsorted String Array in Java:

Google

Apple

Sony

Sorted String Array in ascending order :

Apple

Google

Sony

Sorting Array in Descending order in Java Example

Unsorted int Array in Java:

Apple

Google

Sony

Sorted String Array in descending order :

Sony

Google

Apple

Sorting part of array in java:

Sorted sub array in Java:

1

2

3

5

4

Important points about Sort method of Arrays:

Here are some important and worth noting point about sort method of Arrays class for quick references:

1. Arrays.sort() is an overloaded method and can sort int, byte, short, char or object[] arrays.

2. Arrays.sort)( also allows you to sort a sub-array or part of array in Java.

That’s all on how to sort java array on ascending and descending order and part of array in Java. You can also use the workaround by converting array into arraylist and than sorting but I think Arrays.sort() is preferred method for sorting arrays in Java.

One of the most important thing to know about Arrays.sort() method is that it uses two pivot quicksort algorithm to sort primitives while a stable mergesort algorithm to sort objects. In addition, there is one more overloaded version of sort(array, Comparator) which takes comparator to sort array in custom order, and can be uesd to sort in reverse order. By the way, sorry to say but no easy way to sort primitive in reverse order.

There are couple of other ways to sort array in Java e.g. by using bubble sort, quick sort or insertion sort. Though Java only support quicksort via java.util.Arrays class, you can still write this sorting algorithm code by your own.