- DSA using Java Tutorial
- DSA using Java - Home
- DSA using Java - Overview
- DSA using Java - Environment Setup
- DSA using Java - Algorithms
- DSA using Java - Data Structures
- DSA using Java - Array
- DSA using Java - Linked List
- DSA using Java - Doubly Linked List
- DSA using Java - Circular Linked List
- DSA using Java - Stack
- DSA - Parsing Expressions
- DSA using Java - Queue
- DSA using Java - Priority Queue
- DSA using Java - Tree
- DSA using Java - Hash Table
- DSA using Java - Heap
- DSA using Java - Graph
- DSA using Java - Search techniques
- DSA using Java - Sorting techniques
- DSA using Java - Recursion
- DSA using Java Useful Resources
- DSA using Java - Quick Guide
- DSA using Java - Useful Resources
- DSA using Java - Discussion
DSA using Java - Quick Sort
Overview
Quick sort is a highly efficient sorting algorithm and is based on partitioning of array of data into smaller arrays. A large array is partitioned into two arrays one of which holds values smaller than specified value say pivot based on which the partition is made and another array holds values greater than pivot value.
The quick sort partitions an array and then calls itself recursively twice to sort the resulting two subarray. This algorithm is quite efficient for large sized data sets as its average and worst case complexity are of O(nlogn) where n are no. of items.
Pseudocode
A : array of items procedure quickSort(left, right) if right-left <= 0 return else pivot = A[right] partition = partitionFunc(left, right, pivot) quickSort(left,partition-1) quickSort(partition+1,right) end if end procedure function partitionFunc(left, right, pivot) leftPointer = left -1 rightPointer = right while True do while A[++leftPointer] < pivot do //donothing end while while rightPointer > 0 && A[--rightPointer] > pivot do //donothing end while if leftPointer >= rightPointer break else swap leftPointer,rightPointer end if end while swap leftPointer,right return leftPointer end function procedure swap (num1, num2) temp = A[num1] A[num1] = A[num2] A[num2] = temp; end procedure
Demo Program
package com.tutorialspoint.advancedsort; import java.util.Arrays; public class QuickSortDemo { private static int[] intArray = {4,6,3,2,1,9,7}; public static void main(String[] args){ QuickSortDemo quickSortDemo = new QuickSortDemo(); System.out.println("Input Array: " +Arrays.toString(intArray)); printline(50); quickSortDemo.quickSort(0, intArray.length-1); System.out.println("Output Array: " + Arrays.toString(intArray)); printline(50); } public static void printline(int count){ for(int i=0;i <count-1;i++){ System.out.print("="); } System.out.println("="); } private int partition(int left, int right, int pivot){ int leftPointer = left -1; int rightPointer = right; while(true){ while(intArray[++leftPointer] < pivot){ //do nothing } while(rightPointer > 0 && intArray[--rightPointer] > pivot){ //do nothing } if(leftPointer >= rightPointer){ break; }else{ System.out.println(" item swapped :" + intArray[leftPointer]+","+intArray[rightPointer]); swap(leftPointer,rightPointer); } } System.out.println(" pivot swapped :" + intArray[leftPointer]+","+intArray[right]); swap(leftPointer,right); System.out.println("Updated Array: " + Arrays.toString(intArray)); return leftPointer; } private void swap(int num1, int num2){ int temp = intArray[num1]; intArray[num1] = intArray[num2]; intArray[num2] = temp; } public void quickSort(int left, int right){ if(right-left <= 0){ return; }else{ int pivot = intArray[right]; int partition = partition(left, right, pivot); quickSort(left,partition-1); quickSort(partition+1,right); } } }
If we compile and run the above program then it would produce following result −
Input Array: [4, 6, 3, 2, 1, 9, 7] ================================================== pivot swapped :9,7 Updated Array: [4, 6, 3, 2, 1, 7, 9] pivot swapped :4,1 Updated Array: [1, 6, 3, 2, 4, 7, 9] item swapped :6,2 pivot swapped :6,4 Updated Array: [1, 2, 3, 4, 6, 7, 9] pivot swapped :3,3 Updated Array: [1, 2, 3, 4, 6, 7, 9] Output Array: [1, 2, 3, 4, 6, 7, 9] ==================================================
Advertisements