×

Quick Sort in Java

Quick Sort in Java

Like merge sort, quick sort also uses the divide and conquer approach to sort the given array or list. In quick sort, the sorting of an array is achieved by taking an element from the input array as the pivot and then split the array using the pivot.

Algorithm

STEP 1: Take either the first or the last element as the pivot element.

STEP 2: Find and place the pivot element at its correct position, i.e., the elements that are on the left side of the pivot element must be less than the pivot element. Also, elements that are on the right side of the pivot element must be greater than the pivot element.

STEP 3: Recursively execute steps 1 and 2 till the whole array is sorted.

Pseudo Code

 // start --> Beginning index, end --> Last index
quickSort(arr[], start, end)
{
    if(start >= end) return; // base case
    else
    {
        // The partition() method positions the pivot
        // at the right place, i.e., left side of pivot contains
        // elements that are less than pivot and right side of
        // pivot contains elements that are greater than pivot                   
        pivot = partition(arr, start, end);
        // Invoking the method quickSort() for the left side of pivot
        quickSort(arr, start, pivot - 1); 
        // Invoking the method quickSort() for the right side of pivot
        quickSort(arr, pivot + 1, end);
    }
} 

Java Program

The following Java program implements Quick sort using the pseudo-code defined above.

FileName: QuickSortExample.java

 public class QuickSortExample
{
// The quickSort() method takes element present at the index e
// as the pivot element to do the sorting
// s is the start index
// e is the end index
static void quickSort(int arr[], int s, int e)
{
// handling base case
if(s >= e) return;
else
{
    // pivot contains the index of the pivot element
    int pivot = partition(arr, s, e);
    // recursively sorting the left side of the pivot
    quickSort(arr, s, pivot - 1);
    // recursively sorting the right side of the pivot
    quickSort(arr, pivot + 1, e);
}
}
// the partition() method finds the
// proper position of the pivot element a[e]
// by virtually splitting the array into two subarrays.
// The left subarray contains the elements that are less than the pivot element
// the right subarray contains the elements that are greater than the pivot element
static int partition(int a[], int s, int e)
{
    // low points to the last element that is
    // less than the pivot element
    int low = s - 1;
    // iterating over every element of the array,
    // except the pivot element
    for(int i = s; i < e; i++)
    {
        if(a[i] < a[e])
        {
            // ensuring that the elements of the left part
            // is less than the pivot element.
            low = low + 1;
            int temp = a[low];
            a[low] = a[i];
            a[i] = temp;
        }
    }
    // placing the pivot element
    // at the appropriate position
    int temp = a[low + 1];
    a[low + 1] = a[e];
    a[e] = temp;
    // returning the index of the pivot element.
    return low + 1;
}
// main method
public static void main(String argvs[])
{
    // given input array
    int a[] = {67, 78, 34, 12, 30, 6, 9, 21};
    // calculating size of the input array
    int size = a.length;
    System.out.println("The array before sorting is:");
    for(int j = 0; j < size; j++)
    {
        System.out.print(a[j] + " ");
    }
    System.out.println(" \n");
    // sorting the input array using quick sort
    quickSort(a, 0, a.length - 1);
    System.out.println("The array after sorting is:");
    for(int j = 0; j < size; j++)
    {
        System.out.print(a[j] + " ");
    }
}
} 

Output:

 The array before sorting is:
67 78 34 12 30 6 9 21
The array after sorting is:
6 9 12 21 30 34 67 78 

Explanation: All we have to take care is how elements less than the pivot element take the left side of the array. It is done by the for-loop present in the partition() method. When all the elements less than the pivot element take the left side of the array, the remaining elements automatically take the right side. These remaining elements are greater than the pivot element. The pivot element can then be placed just after the ending of elements that are smaller than the pivot element. Observe the following diagram.

Quick Sort in Java

Analysis of Quick Sort

One of the main advantages of the quick sort algorithm is that it is in-place sorting. It means that it does not require no extra space for sorting. Looking from this perspective, quick sort should be preferred over the merge sort. Also, this algorithm works as quickly as merge sort.

The downsides of the algorithm are that when a sorted array is given as input, the algorithm takes O(n2) time to process the sorted array. It is worse than merge sort. It takes O(nlog(n)) time to sort the array. Note that n is the size of the input array.

Conclusion

Between merge sort and quick sort, quick sort is the better choice when the array is not sorted. If, instead of an array, a linked list is given to be sorted, go for merge sort instead of quicksort. The reason behind this is, unlike an array, randomized access of elements is not possible in a linked list, and quick sort relies heavily on the random access of elements, whereas, merge sort does not.

Also, it is found that merge sort works well for larger data sets, and quick sort works well for smaller data sets.

Time Complexity

The average and best time complexity of the quicksort is O(nlog(n)), where n is the number of elements present in the array. For sorted arrays, this sorting algorithm gives the time complexity as O(n2). Hence, the worst time complexity of this sorting algorithm is O(n2).

Space Complexity

The space complexity of the merge sort algorithm is O(1), that is, constant space complexity. Observe the code; there is no auxiliary array or any additional space used to do the sorting.


Related Topics

Java.sql.Time Format

In JDBC API as a cover aroundjava.util.Date that handles SQL-specific requirements we use the java.sql.Time. The java.sql.Time extends java.util.Date class. To represent SQL TIME, without a date this class is...

6 minutes read.

How to Set Java_home in Linux

To set the Java_home in Linux, we must follow several steps to make us understand it easily.  Java follows the principle called WORA (write once run anywhere). We know that java...

3 minutes read.

Java Char Keyword

The java char keyword is a data type which is defined as character data type.Char keyword belongs to a primitive data type where the data types are classified into primitive...

4 minutes read.

How Many Ways to Create an Object in Java?

As you know, a class is a blueprint for an object, and you can create objects from it. There are several ways to create objects of classes in Java. This...

6 minutes read.

Sylvester Sequence in Java

A Sylvester Sequence is a series of numbers in which each term is the sum of the terms before it plus 1. The sequence's first two terms are 2 and...

3 minutes read.

Java Trim

Leading and leaving spaces are removed by the built-in Java String trim() method. Space seems to have the Unicode element of "x0040." Java trim() function looks for all of these...

3 minutes read.

Moran Numbers in Java

In this article, we will be acknowledged about the moran numbers in Java, how they are formed, what are the approaches to achieve the moran numbers. Moran Number A moran numbers are...

3 minutes read.

JIT in Java

What is JIT ? JIT stands for " Just in Time Compiler ". It is called "Just in time" because it is called at the very last moment when the interpretation...

5 minutes read.

Self-Descriptive Numbers in Java

A number n is given. Identifying the self-descriptive numbers that exist between 1 and n is our task. Self-Descriptive Numbers The definition of a self-descriptive number, m, is a number with b...

6 minutes read.

String to JSON in Java

Nowadays, receiving data in JSON String format rather than XML is quite frequent. Java does not transform JSON String to JSON Object when dealing with JSON String. However, using the...

3 minutes read.

Volatile keyword in Java

Multiple threads can change a variable's value by using the volatile keyword. Making classes thread-safe is another application for it. It indicates that using a method or an instance of...

3 minutes read.

Program to Implement FLAMES Game in Java

Friends, Lovers, Affectionate, Marriage, Enemies, and Sibling are all represented by the acronym FLAMES, which also serves as the name of a well-known game. Although, it can be entertaining to...

4 minutes read.

Why String in Immutable in Java?

Why String in Immutable in Java Immutable means unchangeable or unmodifiable.  Strings in Java are immutable, it means once a string is created, it cannot be modified or changed. Any change...

2 minutes read.

Caesar Cipher Program in Java

It is among the most popular and straightforward encryption methods. With this method, each letter in the text is swapped out for a letter that is a certain number of...

3 minutes read.

Java Tokens

Classes and methods are included in the Java program. The procedures also provide the expressions and statements required to finish a specific operation. Tokens make up the sentences and expressions...

4 minutes read.

Java ResultSetMetaData

The data about another data is called Metadata. The ResultSetMetaData is used to store the data about ResultSet. The ResultSet Contains the columns, rows, names of table, datatypes etc. these...

2 minutes read.

Difference between String, StringBuffer and StringBuilder in java

What is a string in Java? Strings are a collection of characters that are commonly used in Java programming. Strings are regarded as objects in the Java programming language. “String” is a...

4 minutes read.

Java String substring() method

Java String substring() method returns a part of the String. Syntax: public String substring(int startIndex) public String substring(int startIndex, int endIndex) Parameters: startIndex : starting index endIndex : ending index Returns: It returns a specified String. Throws: StringIndexOutOfBoundsException if start...

2 minutes read.

ArrayDeque in Java

ArrayDeque The ArrayDeque is one of the essential concepts in java to implement the deque interface. It will allow us to apply a resizable array to implement the Deque interface. This...

8 minutes read.

How to enable java in chrome

The Java module is huge for the Java Runtime Environment (JRE). It permits a program to work with the Java stage to run Java applets. Essentially, each of the undertakings connect...

3 minutes read.