- 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
QuickSortDemo.java
package com.tutorialspoint;
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);
}
}
}
Output
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] ==================================================
dsa_using_java_sorting_techniques.htm
Advertisements