Sorting an array is a fundamental task in many programming languages. Java languages provide a diverse range of methods to achieve this. In this article, we will cover a variety of methods to sort arrays in Java, including the built-in methods and some custom implementations. By the end of this guide, you will have a comprehensive understanding of how to sort arrays efficiently in Java. What is sorting? Sorting is like arranging a deck of cards in a certain order, from the smallest to the largest or vice versa. In programming, it's a way to arrange elements in a list or array in a certain order, which may be ascending or descending. A sorting algorithm rearranges elements according to a comparison operator on the elements. The comparison operator decides the new order of elements in the respective data structure. Sort Array in Ascending Order Ascending order means arranging the elements in the lowest to highest order. It is also known as natural order or numerical order. In Java, we can sort the array in the following ways: ● Using the sort() Method ● Without using the method ● Using the for Loop ● Using the User-Defined Method Using the sort() Method In Java, Array is the class defined in the java.util. package provides a sort() method to sort an array in ascending order. This method uses a Dual-Pivot Quicksort Algorithm, whose complexity is O(n log(n)). It is a static method that parses an array as a parameter and does not return anything. This method accepts an array of types: int, float, double, long, char, and byte. Syntax public static void sort(int[]array) The following program demonstrates the sort() method of the Arrays class. Program import java.util.Arrays; class Main{ public static void main(String args[]){ int [] array = new int []{33,2,34,534,1,93} ; Arrays.sort(array) ; for (int i : array) { System.out.print(i+" "); } } } Output 1 2 33 34 93 534 Without Using the Method Using the for Loop The following program demonstrates the for loop initialized by an array of integer types and sorting the array in ascending order. Program public class SortingExample { public static void main(String[] args) { int[] arr = new int[] {435,93,34,53,12,334,53,34,23,34}; System.out.println("Array elements after sorting: "); for (int i = 0; i < arr.length; i++) { for (int j = i + 1; j < arr.length; j++){ int tmp = 0; if (arr[i] > arr[j]) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } System.out.print(arr[i]+" "); } } } Output Array elements after sorting: 12 23 34 34 34 53 53 93 334 435 Using the User-Defined Method We can also sort the array using the user-defined method. We have defined a method named sortArray() that contains the logic to sort an array in natural order. The following program demonstrates the user-defined method. Program public class Main { public static void main(String[] args) { int i; int array[] = { 34,55,99,23,5,34, 21,1}; System.out.print("Array elements before sorting: \n"); for (i = 0; i < array.length; i++) System.out.print(array[i]+" "); sortArray(array, array.length); System.out.println() ; System.out.print("Array elements after sorting: \n"); for (i = 0; i < array.length; i++) { System.out.print(array[i]+" "); } } private static void sortArray(int array[], int n) { for (int i = 1; i < n; i++) { int j = i; int a = array[i]; while ((j > 0) && (array[j - 1] > a)){ array[j] = array[j - 1]; j--; } array[j] = a; } } } Output Array elements before sorting: 34 55 99 23 5 34 21 1 Array elements after sorting: 1 5 21 23 34 34 55 99 Sort Array in Descending Order Descending order arranges the elements from the highest to the lowest order. We can perform descending order in the following ways. [ ]● Using the reverseOrder() Method ● Without using the method ● Using the for loop ● Using the User-Defined Method Using the reverseOrder() Method The reversOrder() method is defined in the collection framework classes. It is a convenient way to sort arrays in descending order. It returns a comparator that imposes the reverse of the natural ordering on a collection of objects that implement the ‘Comparable’ interface. It means that the array first sorts the array using the sort() method in ascending order. After that the reverseOrder() method reverses the natural ordering, and we get a sorted array in descending order. Syntax public static <T> Comparator <T> reverseOrder() Program import java.util.Arrays; import java.util.Collections; class Main{ public static void main(String[] args) { Integer [] array = {3,4,1,5,9,3,4}; Arrays.sort(array, Collections.reverseOrder()); System.out.println("Array elements in descending order: " +Arrays.toString(array)); } } Output Array elements in descending order: [9, 5, 4, 4, 3, 3, 1] Program: The following program sorts array elements in alphabetical order. import java.util.Arrays; import java.util.Collections; public class Main { public static void main(String[] args) { String[] strarray = { "Harry", "Potter", "Voldemort", "Computer", "Singhaniya", "Watermelon" }; Arrays.sort(strarray, Collections.reverseOrder()); System.out.println("Array elements in descending order: " + Arrays.toString(strarray)); } } Output Array elements in descending order: [Watermelon, Voldemort, Singhaniya, Potter, Harry, Computer] Without Using the Method The following program sorts the array using the loop. We have initialized an integer array and performed sorting in descending order. Program public class Main { public static void main(String[] args) { int temp; int a[] = { 12,5,9, 1, 4, 2,5, 9, 34, 53 }; for (int i = 0; i < a.length; i++) { for (int j = i + 1; j < a.length; j++) { if (a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } System.out.println("Array elements in descending order:"); // accessing element of the array for (int i = 0; i <= a.length - 1; i++) { System.out.print(a[i]+" "); } } } Output Array elements in descending order: 53 34 12 9 9 5 5 4 2 1 Using the User-Defined Method Program import java.util.Scanner; public class Main { public static void main(String[] args) { int temp; int a[] = {33,4,5,3,31,2,3} ; int len = a.length ; System.out.println("Array Elements Before Sorting") ; for (int i : a) { System.out.print(i+" "); } System.out.println(); for (int i = 0; i < a.length-1; i++) { for (int j = i + 1; j < a.length; j++) { if (a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } System.out.println("Array elements in descending order:"); for (int i = 0; i < len; i++) { System.out.print(a[i]+" "); } System.out.print(a[len-1]); } } Output Array Elements Before Sorting 33 4 5 3 31 2 3 Array elements in descending order: 33 31 5 4 3 3 2 2 How to Sort Subarray An array derived from the array is known as a subarray. Suppose we have an array[] with the following elements in the array [12,90,43, 53, 23, 34, 1, 33, 5], and we want to sort array elements from 43 to 33 and keep the other elements as it is. To sort a subarray, The Arrays class provides the static method name sort(). This method sorts the specified range of the array into ascending order. This method can sort any array type: long, double, float, char, byte, etc. Syntax public static void sort(int[] arr, int startIndex, int lastIndex) This method takes three parameters. ● arr[]. An array to be sorted. ● startIndex: The index of the first element of the subarray. It participates in the sorting. ● lastIndex: The index of the last element of the subarray. It does not participate in the sorting. If the startIndex is equal to the lastIndex. The range to be sorted is empty. It throws IllegalArgumentException. If the startIndex is greater than the lastIndex. Then, it will throw ArrayIndexOutOfBoundException. The following program demonstrates sort() method in Java Program import java.util.Arrays; public class Main { public static void main(String[] args) { int[] a = { 33, 23, 1, 53, 2, 4,9, 1}; Arrays.sort(a, 2, 7); System.out.print("Sorted Array = ") ; for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); } } } Output Sorted Array = 33 23 1 2 4 9 53 1 Conclusion In this article, we learned about sorting arrays in Java. It is a fundamental skill that every Java developer should master. The ‘Arrays’ class provides a powerful and easy-to-use method for sorting entire arrays or specific subarrays. Understanding How to utilize methods effectively can significantly enhance the performance and readability of your code. Frequently Asked Questions What methods are available for sorting arrays in Java? Java language provides the ‘Arrays.sort()’ method for sorting arrays. It can sort arrays of primitives and objects and supports sorting subarrays. Can I sort an array of custom objects? Yes, we can sort an array of custom objects by implementing a ‘Comparable’ interface in your class or by providing a ‘Comparator’ to the ‘Arrays.sort()’ method. Can I sort arrays with null elements? In Java, if you sort an array with a null element, it will throw a ‘NullPointerException’. If the array is of a reference type, ensure that null elements are handled or removed. Can I sort an array of boolean values? We cannot directly sort the array boolean values in Java using the Arrays.sort() method. However, we can convert the boolean value to integers (0 and 1), sort the integer array, and then convert it back to boolean values. Sorting an array is a fundamental task in many programming languages. Java languages provide a diverse range of methods to achieve this. In this article, we will cover a variety of methods to sort arrays in Java, including the built-in methods and some custom implementations. By the end of this guide, you will have a comprehensive understanding of how to sort arrays efficiently in Java. What is sorting? Sorting is like arranging a deck of cards in a certain order, from the smallest to the largest or vice versa. In programming, it's a way to arrange elements in a list or array in a certain order, which may be ascending or descending. A sorting algorithm rearranges elements according to a comparison operator on the elements. The comparison operator decides the new order of elements in the respective data structure. Sort Array in Ascending Order Ascending order means arranging the elements in the lowest to highest order. It is also known as natural order or numerical order. In Java, we can sort the array in the following ways: ● Using the sort() Method ● Without using the method ● Using the for Loop ● Using the User-Defined Method Using the sort() Method Using the sort() Method In Java, Array is the class defined in the java.util. package provides a sort() method to sort an array in ascending order. This method uses a Dual-Pivot Quicksort Algorithm, whose complexity is O(n log(n)). It is a static method that parses an array as a parameter and does not return anything. This method accepts an array of types: int, float, double, long, char, and byte. Syntax public static void sort(int[]array) public static void sort(int[]array) The following program demonstrates the sort() method of the Arrays class. Program import java.util.Arrays; class Main{ public static void main(String args[]){ int [] array = new int []{33,2,34,534,1,93} ; Arrays.sort(array) ; for (int i : array) { System.out.print(i+" "); } } } import java.util.Arrays; class Main{ public static void main(String args[]){ int [] array = new int []{33,2,34,534,1,93} ; Arrays.sort(array) ; for (int i : array) { System.out.print(i+" "); } } } Output 1 2 33 34 93 534 Without Using the Method Without Using the Method Using the for Loop The following program demonstrates the for loop initialized by an array of integer types and sorting the array in ascending order. Program public class SortingExample { public static void main(String[] args) { int[] arr = new int[] {435,93,34,53,12,334,53,34,23,34}; System.out.println("Array elements after sorting: "); for (int i = 0; i < arr.length; i++) { for (int j = i + 1; j < arr.length; j++){ int tmp = 0; if (arr[i] > arr[j]) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } System.out.print(arr[i]+" "); } } } public class SortingExample { public static void main(String[] args) { int[] arr = new int[] {435,93,34,53,12,334,53,34,23,34}; System.out.println("Array elements after sorting: "); for (int i = 0; i < arr.length; i++) { for (int j = i + 1; j < arr.length; j++){ int tmp = 0; if (arr[i] > arr[j]) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } System.out.print(arr[i]+" "); } } } Output Array elements after sorting: 12 23 34 34 34 53 53 93 334 435 Using the User-Defined Method Using the User-Defined Method We can also sort the array using the user-defined method. We have defined a method named sortArray() that contains the logic to sort an array in natural order. The following program demonstrates the user-defined method. Program public class Main { public static void main(String[] args) { int i; int array[] = { 34,55,99,23,5,34, 21,1}; System.out.print("Array elements before sorting: \n"); for (i = 0; i < array.length; i++) System.out.print(array[i]+" "); sortArray(array, array.length); System.out.println() ; System.out.print("Array elements after sorting: \n"); for (i = 0; i < array.length; i++) { System.out.print(array[i]+" "); } } private static void sortArray(int array[], int n) { for (int i = 1; i < n; i++) { int j = i; int a = array[i]; while ((j > 0) && (array[j - 1] > a)){ array[j] = array[j - 1]; j--; } array[j] = a; } } } public class Main { public static void main(String[] args) { int i; int array[] = { 34,55,99,23,5,34, 21,1}; System.out.print("Array elements before sorting: \n"); for (i = 0; i < array.length; i++) System.out.print(array[i]+" "); sortArray(array, array.length); System.out.println() ; System.out.print("Array elements after sorting: \n"); for (i = 0; i < array.length; i++) { System.out.print(array[i]+" "); } } private static void sortArray(int array[], int n) { for (int i = 1; i < n; i++) { int j = i; int a = array[i]; while ((j > 0) && (array[j - 1] > a)){ array[j] = array[j - 1]; j--; } array[j] = a; } } } Output Array elements before sorting: 34 55 99 23 5 34 21 1 Array elements after sorting: 1 5 21 23 34 34 55 99 Sort Array in Descending Order Descending order arranges the elements from the highest to the lowest order. We can perform descending order in the following ways. [ ]● Using the reverseOrder() Method ● Without using the method ● Using the for loop ● Using the User-Defined Method [ ] ● Using the reverseOrder() Method ● Without using the method ● Using the for loop ● Using the User-Defined Method [ ] Using the reverseOrder() Method Using the reverseOrder() Method The reversOrder() method is defined in the collection framework classes. It is a convenient way to sort arrays in descending order. It returns a comparator that imposes the reverse of the natural ordering on a collection of objects that implement the ‘Comparable’ interface. It means that the array first sorts the array using the sort() method in ascending order. After that the reverseOrder() method reverses the natural ordering, and we get a sorted array in descending order. Syntax public static <T> Comparator <T> reverseOrder() public static <T> Comparator <T> reverseOrder() Program import java.util.Arrays; import java.util.Collections; class Main{ public static void main(String[] args) { Integer [] array = {3,4,1,5,9,3,4}; Arrays.sort(array, Collections.reverseOrder()); System.out.println("Array elements in descending order: " +Arrays.toString(array)); } } import java.util.Arrays; import java.util.Collections; class Main{ public static void main(String[] args) { Integer [] array = {3,4,1,5,9,3,4}; Arrays.sort(array, Collections.reverseOrder()); System.out.println("Array elements in descending order: " +Arrays.toString(array)); } } Output Array elements in descending order: [9, 5, 4, 4, 3, 3, 1] Program: The following program sorts array elements in alphabetical order. import java.util.Arrays; import java.util.Collections; public class Main { public static void main(String[] args) { String[] strarray = { "Harry", "Potter", "Voldemort", "Computer", "Singhaniya", "Watermelon" }; Arrays.sort(strarray, Collections.reverseOrder()); System.out.println("Array elements in descending order: " + Arrays.toString(strarray)); } } import java.util.Arrays; import java.util.Collections; public class Main { public static void main(String[] args) { String[] strarray = { "Harry", "Potter", "Voldemort", "Computer", "Singhaniya", "Watermelon" }; Arrays.sort(strarray, Collections.reverseOrder()); System.out.println("Array elements in descending order: " + Arrays.toString(strarray)); } } Output Array elements in descending order: [Watermelon, Voldemort, Singhaniya, Potter, Harry, Computer] Without Using the Method Without Using the Method The following program sorts the array using the loop. We have initialized an integer array and performed sorting in descending order. Program public class Main { public static void main(String[] args) { int temp; int a[] = { 12,5,9, 1, 4, 2,5, 9, 34, 53 }; for (int i = 0; i < a.length; i++) { for (int j = i + 1; j < a.length; j++) { if (a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } System.out.println("Array elements in descending order:"); // accessing element of the array for (int i = 0; i <= a.length - 1; i++) { System.out.print(a[i]+" "); } } } public class Main { public static void main(String[] args) { int temp; int a[] = { 12,5,9, 1, 4, 2,5, 9, 34, 53 }; for (int i = 0; i < a.length; i++) { for (int j = i + 1; j < a.length; j++) { if (a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } System.out.println("Array elements in descending order:"); // accessing element of the array for (int i = 0; i <= a.length - 1; i++) { System.out.print(a[i]+" "); } } } Output Array elements in descending order: 53 34 12 9 9 5 5 4 2 1 Using the User-Defined Method Using the User-Defined Method Program import java.util.Scanner; public class Main { public static void main(String[] args) { int temp; int a[] = {33,4,5,3,31,2,3} ; int len = a.length ; System.out.println("Array Elements Before Sorting") ; for (int i : a) { System.out.print(i+" "); } System.out.println(); for (int i = 0; i < a.length-1; i++) { for (int j = i + 1; j < a.length; j++) { if (a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } System.out.println("Array elements in descending order:"); for (int i = 0; i < len; i++) { System.out.print(a[i]+" "); } System.out.print(a[len-1]); } } import java.util.Scanner; public class Main { public static void main(String[] args) { int temp; int a[] = {33,4,5,3,31,2,3} ; int len = a.length ; System.out.println("Array Elements Before Sorting") ; for (int i : a) { System.out.print(i+" "); } System.out.println(); for (int i = 0; i < a.length-1; i++) { for (int j = i + 1; j < a.length; j++) { if (a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } System.out.println("Array elements in descending order:"); for (int i = 0; i < len; i++) { System.out.print(a[i]+" "); } System.out.print(a[len-1]); } } Output Array Elements Before Sorting 33 4 5 3 31 2 3 Array elements in descending order: 33 31 5 4 3 3 2 2 How to Sort Subarray An array derived from the array is known as a subarray. Suppose we have an array[] with the following elements in the array [12,90,43, 53, 23, 34, 1, 33, 5], and we want to sort array elements from 43 to 33 and keep the other elements as it is. To sort a subarray, The Arrays class provides the static method name sort(). This method sorts the specified range of the array into ascending order. This method can sort any array type: long, double, float, char, byte, etc. Syntax public static void sort(int[] arr, int startIndex, int lastIndex) public static void sort(int[] arr, int startIndex, int lastIndex) This method takes three parameters. ● arr[]. An array to be sorted. ● startIndex: The index of the first element of the subarray. It participates in the sorting. ● lastIndex: The index of the last element of the subarray. It does not participate in the sorting. If the startIndex is equal to the lastIndex. The range to be sorted is empty. It throws IllegalArgumentException. If the startIndex is greater than the lastIndex. Then, it will throw ArrayIndexOutOfBoundException. The following program demonstrates sort() method in Java Program import java.util.Arrays; public class Main { public static void main(String[] args) { int[] a = { 33, 23, 1, 53, 2, 4,9, 1}; Arrays.sort(a, 2, 7); System.out.print("Sorted Array = ") ; for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); } } } import java.util.Arrays; public class Main { public static void main(String[] args) { int[] a = { 33, 23, 1, 53, 2, 4,9, 1}; Arrays.sort(a, 2, 7); System.out.print("Sorted Array = ") ; for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); } } } Output Sorted Array = 33 23 1 2 4 9 53 1 Conclusion In this article, we learned about sorting arrays in Java. It is a fundamental skill that every Java developer should master. The ‘Arrays’ class provides a powerful and easy-to-use method for sorting entire arrays or specific subarrays. Understanding How to utilize methods effectively can significantly enhance the performance and readability of your code. Frequently Asked Questions What methods are available for sorting arrays in Java? What methods are available for sorting arrays in Java? Java language provides the ‘Arrays.sort()’ method for sorting arrays. It can sort arrays of primitives and objects and supports sorting subarrays. Can I sort an array of custom objects? Can I sort an array of custom objects? Yes, we can sort an array of custom objects by implementing a ‘Comparable’ interface in your class or by providing a ‘Comparator’ to the ‘Arrays.sort()’ method. Can I sort arrays with null elements? Can I sort arrays with null elements? In Java, if you sort an array with a null element, it will throw a ‘NullPointerException’. If the array is of a reference type, ensure that null elements are handled or removed. Can I sort an array of boolean values? Can I sort an array of boolean values? We cannot directly sort the array boolean values in Java using the Arrays.sort() method. However, we can convert the boolean value to integers (0 and 1), sort the integer array, and then convert it back to boolean values.