The previous challenges covered Insertion Sort, which is a simple and intuitive sorting algorithm with a running time of O(n^2). In these next few challenges, we’re covering a divide-and-conquer algorithm called Quicksort (also known as Partition Sort). This challenge is a modified version of the algorithm that only addresses partitioning. It is implemented as follows:
Step 1: Divide
Choose some pivot element,p, and partition your unsorted array, arr, into three smaller arrays: left,right , and equal, where each element in left<p, each element in right>p, and each element in equal=p.
For example: Assume arr=[5,7,4,3,8]
The pivot is at arr[0] = 5
is divided into left ,equal , and right .
Function Description
Complete the quickSort function in the editor below. It should return an array of integers as described above.
quickSort has the following parameter(s):
- arr: an array of integers where arr[0] is the pivot element
Input Format
The first line contains n, the size of the array arr.
The second line contains n space-separated integers describing arr (the unsorted array). The first integer (corresponding to arr[0]) is your pivot element, p.
Constraints
- 1<=n<=1000
- 1000<=arr[i]<=1000 where 0<=i<=n
- All elements will be unique.
Output Format
On a single line, print the partitioned numbers (i.e.: the elements in left, then the elements in equal, and then the elements in right). Each integer should be separated by a single space.
Sample Input
5 4 5 3 7 2
Sample Output
3 2 4 5 7
Quicksort 1 – Partition HackerRank Solution in C
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <assert.h> void partition(vector <int> ar) { if(ar.size() == 0) return; else if(ar.size() == 1){ cout << ar[0] << endl; return; } int p = ar[0]; vector<int> less; vector<int> more; for(vector<int>::iterator itr = ar.begin() + 1; itr != ar.end(); itr++){ if(*itr < p) less.push_back(*itr); else more.push_back(*itr); } for(vector<int>::iterator itr = less.begin(); itr != less.end(); itr++) cout << *itr << " "; cout << p << " "; for(vector<int>::iterator itr = more.begin(); itr != more.end(); itr++) cout << *itr << " "; cout << endl; } import java.util.*; public class Solution { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] ar = new int[n]; for(int i=0;i<n;i++){ ar[i]=in.nextInt(); } partition(ar); printArray(ar); } static void printArray(int[] ar) { for(int n: ar){ System.out.print(n+" "); } System.out.println(""); } static void partition(int[] ar) { int p=ar[0]; int[] copy=Arrays.copyOf(ar, ar.length); int c=0; for(int i=1;i<ar.length;i++){ if(copy[i]<=p){ ar[c]=copy[i]; c++; } } ar[c]=p; c++; for(int j=0;j<ar.length;j++){ if(copy[j]>p){ ar[c]=copy[j]; c++; } } } }
Quicksort 1 – Partition HackerRank Solution in Python
#!/bin/python # Head ends here def partition(ar): pivot = ar[0] l = len(ar) start_index = 0 end_index = l-1 new_ar = [] for i in range(1,l): if ar[i] <= pivot: new_ar.append(ar[i]) new_ar.append(pivot) for i in range(1,l): if ar[i] > pivot: new_ar.append(ar[i]) print '%s' % ' '.join(map(str, new_ar)) return "" # Tail starts here m = input() ar = [int(i) for i in raw_input().strip().split()] partition(ar)
Quicksort 1 – Partition HackerRank Solution in C#
using System; using System.Collections.Generic; using System.IO; using System.Linq; class Solution { static void Partition(int[] array) { int p = array[0]; List<int> right = array.Where(x => x < p).ToList(); List<int> left = array.Where(x => x > p).ToList(); right.Add(p); right.AddRange(left); Console.WriteLine(String.Concat(right.Select(x => x.ToString() + " "))); } static void Main(String[] args) { Console.ReadLine(); Partition(Console.ReadLine().Trim().Split(' ').Select(x => Int32.Parse(x)).ToArray()); } }
Attempt Quicksort 1 – Partition HackerRank Challenge
Link – https://www.hackerrank.com/challenges/quicksort1/
Next HackerRank Challenge Solution
Link – https://exploringbits.com/pangrams-hackerrank-solution/
Aayush Kumar Gupta is the founder and creator of ExploringBits, a website dedicated to providing useful content for people passionate about Engineering and Technology. Aayush has completed his Bachelor of Technology (Computer Science & Engineering) from 2018-2022. From July 2022, Aayush has been working as a full-time Devops Engineer.