Three way Partitioning of an Array around a Given Range in Java
Three way Partitioning of an Array around a Given Range in Java
Here, in this page we will discuss the program for Three way partitioning of an array around a given range in Java programming language. We are given with an array and a range say [low, high], we need to partition the array in such a way,
- All the elements less than low value, should come first.
- Elements between the low and high value come in middle.
- All elements greater than high should come at the last.
Method Discussed :
- Method 1 : Using Brute Approach
- Method 2 : Using Dutch Algorithm
Let’s discuss them one by one in brief,
Method 1:
In this method we use recursion. At each point in the recursion, we append 0 and 1 to the partially formed number and recur with one less digit.
Method 1 : Code in Java
Run
import java.util.Arrays;
class Main{
public static void main(String[] args){
int arr[] = { 23, 5, 18, 10, 20, 89 };
int n = arr.length, low = 1, high=4;
Arrays.sort(arr);
for(int i=0; i<n; i++)
System.out.print(arr[i]+" ");
}
}
Output :
5 10 18 20 23 89
Method 2:
- We traverse given array elements from left.
- We keep track of two pointers, first (called start in below code) to store next position of smaller element (smaller than range) from beginning;
- And second (called end in below code) to store next position of greater element from end.
Method 2 : Code in Java
Run
import java.io.*;
class Main
{
public static void threeWayPartition(int[] arr, int lowVal, int highVal)
{
int n = arr.length;
int start = 0, end = n-1;
for(int i = 0; i <= end;)
{
if(arr[i] < lowVal)
{
int temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
start++;
i++;
}
else if(arr[i] > highVal)
{
int temp = arr[end];
arr[end] = arr[i];
arr[i] = temp;
end--;
}
else
i++;
}
}
public static void main (String[] args)
{
int arr[] = {1, 14, 5, 20, 4, 2, 54, 20, 87, 98, 3, 1, 32};
threeWayPartition(arr, 10, 20);
for (int i=0; i < arr.length; i++)
{
System.out.print(arr[i] + " ");
}
}
}
Output :
1 5 4 2 1 3 14 20 20 98 87 32 54
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription

Login/Signup to comment