For example, if the given array is [1, 23, 12, 9, 30, 2, 50] and you are asked for the largest 3 elements i.e., k = 3 then your program should print 50, 30, and 23.
Method 1 (Use Bubble k times)
Thanks to Shailendra for suggesting this approach.
Time Complexity: O(n*k)
Like Bubble sort, other sorting algorithms like Selection Sort can also be modified to get the k largest elements.
Method 2 (Use temporary array)
K largest elements from arr[0..n-1]
Time Complexity: O((n-k)*k). If we want the output sorted then O((n-k)*k + k*log(k))
Thanks to nesamani1822 for suggesting this method.
Method 3(Use Sorting)
Following is the implementation of the above.
// C++ code for k largest elements in an array
#include <bits/stdc++.h>
using namespace std;
void kLargest(int arr[], int n, int k)
{
// Sort the given array arr in reverse
// order.
sort(arr, arr + n, greater<int>());
// Print the first kth largest elements
for (int i = 0; i < k; i++)
cout << arr[i] << " ";
}
// driver program
int main()
{
int arr[] = { 1, 23, 12, 9, 30, 2, 50 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
kLargest(arr, n, k);
}
// This article is contributed by Chhavi
// Java code for k largest elements in an array
import java.util.Arrays;
import java.util.Collections;
import java.util.ArrayList;
class GFG {
public static void kLargest(Integer[] arr, int k)
{
// Sort the given array arr in reverse order
// This method doesn't work with primitive data
// types. So, instead of int, Integer type
// array will be used
Arrays.sort(arr, Collections.reverseOrder());
// Print the first kth largest elements
for (int i = 0; i < k; i++)
System.out.print(arr[i] + " ");
}
//This code is contributed by Niraj Dubey
public static ArrayList<Integer> kLargest(int[] arr, int k)
{
//Convert using stream
Integer[] obj_array = Arrays.stream( arr ).boxed().toArray( Integer[] :: new);
Arrays.sort(obj_array, Collections.reverseOrder());
ArrayList<Integer> list = new ArrayList<>(k);
for (int i = 0; i < k; i++)
list.add(obj_array[i]);
return list;
}
public static void main(String[] args)
{
Integer arr[] = new Integer[] { 1, 23, 12, 9,
30, 2, 50 };
int k = 3;
kLargest(arr, k);
//This code is contributed by Niraj Dubey
//What if primitive datatype array is passed and wanted to return in ArrayList<Integer>
int[] prim_array = { 1, 23, 12, 9, 30, 2, 50 };
System.out.print(kLargest(prim_array, k));
}
}
// This code is contributed by Kamal Rawal
''' Python3 code for k largest elements in an array'''
def kLargest(arr, k):
# Sort the given array arr in reverse
# order.
arr.sort(reverse = True)
# Print the first kth largest elements
for i in range(k):
print (arr[i], end =" ")
# Driver program
arr = [1, 23, 12, 9, 30, 2, 50]
# n = len(arr)
k = 3
kLargest(arr, k)
# This code is contributed by shreyanshi_arun.
// C# code for k largest elements in an array
using System;
class GFG {
public static void kLargest(int[] arr, int k)
{
// Sort the given array arr in reverse order
// This method doesn't work with primitive data
// types. So, instead of int, Integer type
// array will be used
Array.Sort(arr);
Array.Reverse(arr);
// Print the first kth largest elements
for (int i = 0; i < k; i++)
Console.Write(arr[i] + " ");
}
// Driver code
public static void Main(String[] args)
{
int[] arr = new int[] { 1, 23, 12, 9,
30, 2, 50 };
int k = 3;
kLargest(arr, k);
}
}
// This code contributed by Rajput-Ji
<?php
// PHP code for k largest
// elements in an array
function kLargest(&$arr, $n, $k)
{
// Sort the given array arr
// in reverse order.
rsort($arr);
// Print the first kth
// largest elements
for ($i = 0; $i < $k; $i++)
echo $arr[$i] . " ";
}
// Driver Code
$arr = array(1, 23, 12, 9,
30, 2, 50);
$n = sizeof($arr);
$k = 3;
kLargest($arr, $n, $k);
// This code is contributed
// by ChitraNayal
?>
<script>
// JavaScript code for k largest
// elements in an array
function kLargest(arr, n, k)
{
// Sort the given array arr in reverse
// order.
arr.sort((a, b) => b - a);
// Print the first kth largest elements
for (let i = 0; i < k; i++)
document.write(arr[i] + " ");
}
// driver program
let arr = [ 1, 23, 12, 9, 30, 2, 50 ];
let n = arr.length;
let k = 3;
kLargest(arr, n, k);
// This code is contributed by Manoj.
</script>
50 30 23
Time complexity: O(n*log(n))
Method 4 (Use Max Heap)
Time complexity: O(n + k*log(n))
Method 5(Use Order Statistics)
Time complexity: O(n) if we don’t need the sorted output, otherwise O(n+k*log(k))
Method 6 (Use Min Heap)
This method is mainly an optimization of method 1. Instead of using temp[] array, use Min Heap.
Time Complexity: O(k*log(k) + (n-k)*log(k)) without sorted output. If sorted output is needed then O(k*log(k) + (n-k)*log(k) + k*log(k)) so overall it is O(k*log(k) + (n-k)*log(k))
All of the above methods can also be used to find the kth largest (or smallest) element.
#include <iostream>
using namespace std;
// Swap function to interchange
// the value of variables x and y
int swap(int& x, int& y)
{
int temp = x;
x = y;
y = temp;
}
// Min Heap Class
// arr holds reference to an integer
// array size indicate the number of
// elements in Min Heap
class MinHeap {
int size;
int* arr;
public:
// Constructor to initialize the size and arr
MinHeap(int size, int input[]);
// Min Heapify function, that assumes that
// 2*i+1 and 2*i+2 are min heap and fix the
// heap property for i.
void heapify(int i);
// Build the min heap, by calling heapify
// for all non-leaf nodes.
void buildHeap();
};
// Constructor to initialize data
// members and creating mean heap
MinHeap::MinHeap(int size, int input[])
{
// Initializing arr and size
this->size = size;
this->arr = input;
// Building the Min Heap
buildHeap();
}
// Min Heapify function, that assumes
// 2*i+1 and 2*i+2 are min heap and
// fix min heap property for i
void MinHeap::heapify(int i)
{
// If Leaf Node, Simply return
if (i >= size / 2)
return;
// variable to store the smallest element
// index out of i, 2*i+1 and 2*i+2
int smallest;
// Index of left node
int left = 2 * i + 1;
// Index of right node
int right = 2 * i + 2;
// Select minimum from left node and
// current node i, and store the minimum
// index in smallest variable
smallest = arr[left] < arr[i] ? left : i;
// If right child exist, compare and
// update the smallest variable
if (right < size)
smallest = arr[right] < arr[smallest]
? right : smallest;
// If Node i violates the min heap
// property, swap current node i with
// smallest to fix the min-heap property
// and recursively call heapify for node smallest.
if (smallest != i) {
swap(arr[i], arr[smallest]);
heapify(smallest);
}
}
// Build Min Heap
void MinHeap::buildHeap()
{
// Calling Heapify for all non leaf nodes
for (int i = size / 2 - 1; i >= 0; i--) {
heapify(i);
}
}
void FirstKelements(int arr[],int size,int k){
// Creating Min Heap for given
// array with only k elements
MinHeap* m = new MinHeap(k, arr);
// Loop For each element in array
// after the kth element
for (int i = k; i < size; i++) {
// if current element is smaller
// than minimum element, do nothing
// and continue to next element
if (arr[0] > arr[i])
continue;
// Otherwise Change minimum element to
// current element, and call heapify to
// restore the heap property
else {
arr[0] = arr[i];
m->heapify(0);
}
}
// Now min heap contains k maximum
// elements, Iterate and print
for (int i = 0; i < k; i++) {
cout << arr[i] << " ";
}
}
// Driver Program
int main()
{
int arr[] = { 11, 3, 2, 1, 15, 5, 4,
45, 88, 96, 50, 45 };
int size = sizeof(arr) / sizeof(arr[0]);
// Size of Min Heap
int k = 3;
FirstKelements(arr,size,k);
return 0;
}
// This code is contributed by Ankur Goel
import java.io.*;
import java.util.*;
class GFG{
public static void FirstKelements(int arr[],
int size,
int k)
{
// Creating Min Heap for given
// array with only k elements
// Create min heap with priority queue
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
for(int i = 0; i < k; i++)
{
minHeap.add(arr[i]);
}
// Loop For each element in array
// after the kth element
for(int i = k; i < size; i++)
{
// If current element is smaller
// than minimum ((top element of
// the minHeap) element, do nothing
// and continue to next element
if (minHeap.peek() > arr[i])
continue;
// Otherwise Change minimum element
// (top element of the minHeap) to
// current element by polling out
// the top element of the minHeap
else
{
minHeap.poll();
minHeap.add(arr[i]);
}
}
// Now min heap contains k maximum
// elements, Iterate and print
Iterator iterator = minHeap.iterator();
while (iterator.hasNext())
{
System.out.print(iterator.next() + " ");
}
}
// Driver code
public static void main (String[] args)
{
int arr[] = { 11, 3, 2, 1, 15, 5, 4,
45, 88, 96, 50, 45 };
int size = arr.length;
// Size of Min Heap
int k = 3;
FirstKelements(arr, size, k);
}
}
// This code is contributed by Vansh Sethi
def FirstKelements(arr,size,k):
# Creating Min Heap for given
# array with only k elements
# Create min heap with priority queue
minHeap = []
for i in range(k):
minHeap.append(arr[i])
# Loop For each element in array
# after the kth element
for i in range(k, size):
minHeap.sort()
# If current element is smaller
# than minimum ((top element of
# the minHeap) element, do nothing
# and continue to next element
if (minHeap[0] > arr[i]):
continue
# Otherwise Change minimum element
# (top element of the minHeap) to
# current element by polling out
# the top element of the minHeap
else:
minHeap.pop(0)
minHeap.append(arr[i])
# Now min heap contains k maximum
# elements, Iterate and print
for i in minHeap:
print(i, end = " ")
# Driver code
arr=[11, 3, 2, 1, 15, 5, 4,45, 88, 96, 50, 45]
size = len(arr)
# Size of Min Heap
k=3
FirstKelements(arr, size, k)
# This code is contributed by avanitrachhadiya2155
using System;
using System.Collections.Generic;
public class GFG
{
public static void FirstKelements(int []arr,
int size,
int k)
{
// Creating Min Heap for given
// array with only k elements
// Create min heap with priority queue
List<int> minHeap = new List<int>();
for(int i = 0; i < k; i++)
{
minHeap.Add(arr[i]);
}
// Loop For each element in array
// after the kth element
for(int i = k; i < size; i++)
{
minHeap.Sort();
// If current element is smaller
// than minimum ((top element of
// the minHeap) element, do nothing
// and continue to next element
if (minHeap[0] > arr[i])
continue;
// Otherwise Change minimum element
// (top element of the minHeap) to
// current element by polling out
// the top element of the minHeap
else
{
minHeap.RemoveAt(0);
minHeap.Add(arr[i]);
}
}
// Now min heap contains k maximum
// elements, Iterate and print
foreach (int i in minHeap)
{
Console.Write(i + " ");
}
}
// Driver code
public static void Main(String[] args)
{
int []arr = { 11, 3, 2, 1, 15, 5, 4,
45, 88, 96, 50, 45 };
int size = arr.Length;
// Size of Min Heap
int k = 3;
FirstKelements(arr, size, k);
}
}
// This code is contributed by aashish1995.
<script>
function FirstKelements(arr , size , k) {
// Creating Min Heap for given
// array with only k elements
// Create min heap with priority queue
var minHeap = [];
for (var i = 0; i < k; i++) {
minHeap.push(arr[i]);
}
// Loop For each element in array
// after the kth element
for (var i = k; i < size; i++) {
minHeap.sort((a,b)=>a-b);
// If current element is smaller
// than minimum ((top element of
// the minHeap) element, do nothing
// and continue to next element
if (minHeap[minHeap.length-3] > arr[i])
continue;
// Otherwise Change minimum element
// (top element of the minHeap) to
// current element by polling out
// the top element of the minHeap
else {
minHeap.reverse();
minHeap.pop();
minHeap.reverse();
minHeap.push(arr[i]);
}
}
// Now min heap contains k maximum
// elements, Iterate and print
for (var iterator of minHeap) {
document.write(iterator + " ");
}
}
// Driver code
var arr = [11, 3, 2, 1, 15, 5, 4,
45, 88, 96, 50, 45];
var size = arr.length;
// Size of Min Heap
var k = 3;
FirstKelements(arr, size, k);
// This code is contributed by gauravrajput1
</script>
50 88 96
Method 7(Using Quick Sort partitioning algorithm):
We can improve on the standard quicksort algorithm by using the random() function. Instead of using the pivot element as the last element, we can randomly choose the pivot element. The worst-case time complexity of this version is O(n2) and the average time complexity is O(n).
Following is the implementation of the above algorithm:
#include <bits/stdc++.h>
using namespace std;
//picks up last element between start and end
int findPivot(int a[], int start, int end)
{
// Selecting the pivot element
int pivot = a[end];
// Initially partition-index will be
// at starting
int pIndex = start;
for (int i = start; i < end; i++) {
// If an element is lesser than pivot, swap it.
if (a[i] <= pivot) {
swap(a[i], a[pIndex]);
// Incrementing pIndex for further
// swapping.
pIndex++;
}
}
// Lastly swapping or the
// correct position of pivot
swap(a[pIndex], a[end]);
return pIndex;
}
//THIS PART OF CODE IS CONTRIBUTED BY - rjrachit
//Picks up random pivot element between start and end
int findRandomPivot(int arr[], int start, int end)
{
int n = end - start + 1;
// Selecting the random pivot index
int pivotInd = random()%n;
swap(arr[end],arr[start+pivotInd]);
int pivot = arr[end];
//initialising pivoting point to start index
pivotInd = start;
for (int i = start; i < end; i++) {
// If an element is lesser than pivot, swap it.
if (arr[i] <= pivot) {
swap(arr[i], arr[pivotInd]);
// Incrementing pivotIndex for further
// swapping.
pivotInd++;
}
}
// Lastly swapping or the
// correct position of pivot
swap(arr[pivotInd], arr[end]);
return pivotInd;
}
//THIS PART OF CODE IS CONTRIBUTED BY - rjrachit
void SmallestLargest(int a[], int low, int high, int k,
int n)
{
if (low == high)
return;
else {
int pivotIndex = findRandomPivot(a, low, high);
if (k == pivotIndex) {
cout << k << " smallest elements are : ";
for (int i = 0; i < pivotIndex; i++)
cout << a[i] << " ";
cout << endl;
cout << k << " largest elements are : ";
for (int i = (n - pivotIndex); i < n; i++)
cout << a[i] << " ";
}
else if (k < pivotIndex)
SmallestLargest(a, low, pivotIndex - 1, k, n);
else if (k > pivotIndex)
SmallestLargest(a, pivotIndex + 1, high, k, n);
}
}
// Driver Code
int main()
{
int a[] = { 11, 3, 2, 1, 15, 5, 4, 45, 88, 96, 50, 45 };
int n = sizeof(a) / sizeof(a[0]);
int low = 0;
int high = n - 1;
// Lets assume k is 3
int k = 3;
// Function Call
SmallestLargest(a, low, high, k, n);
return 0;
}
import java.util.*;
class GFG{
//picks up last element between start and end
static int findPivot(int a[], int start, int end)
{
// Selecting the pivot element
int pivot = a[end];
// Initially partition-index will be
// at starting
int pIndex = start;
for (int i = start; i < end; i++) {
// If an element is lesser than pivot, swap it.
if (a[i] <= pivot) {
int temp =a[i];
a[i]= a[pIndex];
a[pIndex] = temp;
// Incrementing pIndex for further
// swapping.
pIndex++;
}
}
// Lastly swapping or the
// correct position of pivot
int temp = a[pIndex];
a[pIndex] = a[end];
a[end] = temp;
return pIndex;
}
//THIS PART OF CODE IS CONTRIBUTED BY - rjrachit
//Picks up random pivot element between start and end
static int findRandomPivot(int arr[], int start, int end)
{
int n = end - start + 1;
// Selecting the random pivot index
int pivotInd = (int) ((Math.random()*1000000)%n);
int temp = arr[end];
arr[end] = arr[start+pivotInd];
arr[start+pivotInd] = temp;
int pivot = arr[end];
//initialising pivoting point to start index
pivotInd = start;
for (int i = start; i < end; i++) {
// If an element is lesser than pivot, swap it.
if (arr[i] <= pivot) {
int temp1 = arr[i];
arr[i]= arr[pivotInd];
arr[pivotInd] = temp1;
// Incrementing pivotIndex for further
// swapping.
pivotInd++;
}
}
// Lastly swapping or the
// correct position of pivot
int tep = arr[pivotInd];
arr[pivotInd] = arr[end];
arr[end] = tep;
return pivotInd;
}
//THIS PART OF CODE IS CONTRIBUTED BY - rjrachit
static void SmallestLargest(int a[], int low, int high, int k,
int n)
{
if (low == high)
return;
else {
int pivotIndex = findRandomPivot(a, low, high);
if (k == pivotIndex) {
System.out.print(k+ " smallest elements are : ");
for (int i = 0; i < pivotIndex; i++)
System.out.print(a[i]+ " ");
System.out.println();
System.out.print(k+ " largest elements are : ");
for (int i = (n - pivotIndex); i < n; i++)
System.out.print(a[i]+ " ");
}
else if (k < pivotIndex)
SmallestLargest(a, low, pivotIndex - 1, k, n);
else if (k > pivotIndex)
SmallestLargest(a, pivotIndex + 1, high, k, n);
}
}
// Driver Code
public static void main(String[] args)
{
int a[] = { 11, 3, 2, 1, 15, 5, 4, 45, 88, 96, 50, 45 };
int n = a.length;
int low = 0;
int high = n - 1;
// Lets assume k is 3
int k = 3;
// Function Call
SmallestLargest(a, low, high, k, n);
}
}
// This code is contributed by Rajput-Ji
# Python program to implement above approach
# picks up last element between start and end
import random
def findPivot(a, start, end):
# Selecting the pivot element
pivot = a[end]
# Initially partition-index will be
# at starting
pIndex = start
for i in range(start,end):
# If an element is lesser than pivot, swap it.
if (a[i] <= pivot):
a[i],a[pIndex] = a[pIndex],a[i]
# Incrementing pIndex for further
# swapping.
pIndex += 1
# Lastly swapping or the
# correct position of pivot
a[end],a[pIndex] = a[pIndex],a[end]
return pIndex
#THIS PART OF CODE IS CONTRIBUTED BY - rjrachit
#Picks up random pivot element between start and end
def findRandomPivot(arr, start, end):
n = end - start + 1
# Selecting the random pivot index
pivotInd = (int((random.random()*1000000))%n)
arr[end],arr[start+pivotInd] = arr[start+pivotInd],arr[end]
pivot = arr[end]
#initialising pivoting poto start index
pivotInd = start
for i in range(start,end):
# If an element is lesser than pivot, swap it.
if (arr[i] <= pivot):
arr[i],arr[pivotInd] = arr[pivotInd],arr[i]
# Incrementing pivotIndex for further
# swapping.
pivotInd += 1
# Lastly swapping or the
# correct position of pivot
arr[pivotInd],arr[end] = arr[end],arr[pivotInd]
return pivotInd
def SmallestLargest(a, low, high, k, n):
if (low == high):
return
else:
pivotIndex = findRandomPivot(a, low, high)
if (k == pivotIndex):
print(str(k)+ " smallest elements are :",end=" ")
for i in range(pivotIndex):
print(a[i],end = " ")
print()
print(str(k)+ " largest elements are :",end=" ")
for i in range(n - pivotIndex,n):
print(a[i],end=" ")
elif (k < pivotIndex):
SmallestLargest(a, low, pivotIndex - 1, k, n)
elif (k > pivotIndex):
SmallestLargest(a, pivotIndex + 1, high, k, n)
# Driver code
a = [ 11, 3, 2, 1, 15, 5, 4, 45, 88, 96, 50, 45 ]
n = len(a)
low = 0
high = n - 1
# assume k is 3
k = 3
# Function Call
SmallestLargest(a, low, high, k, n)
# This code is contributed by shinjanpatra
using System;
using System.Text;
public class GFG {
// picks up last element between start and end
static int findPivot(int []a, int start, int end) {
// Selecting the pivot element
int pivot = a[end];
// Initially partition-index will be
// at starting
int pIndex = start;
for (int i = start; i < end; i++) {
// If an element is lesser than pivot, swap it.
if (a[i] <= pivot) {
int temp6 = a[i];
a[i] = a[pIndex];
a[pIndex] = temp6;
// Incrementing pIndex for further
// swapping.
pIndex++;
}
}
// Lastly swapping or the
// correct position of pivot
int temp = a[pIndex];
a[pIndex] = a[end];
a[end] = temp;
return pIndex;
}
// THIS PART OF CODE IS CONTRIBUTED BY - rjrachit
// Picks up random pivot element between start and end
static int findRandomPivot(int []arr, int start, int end) {
int n = end - start + 1;
// Selecting the random pivot index
Random _random = new Random();
var randomNumber = _random.Next(0, n);
int pivotInd = randomNumber;
int temp = arr[end];
arr[end] = arr[start + pivotInd];
arr[start + pivotInd] = temp;
int pivot = arr[end];
// initialising pivoting point to start index
pivotInd = start;
for (int i = start; i < end; i++) {
// If an element is lesser than pivot, swap it.
if (arr[i] <= pivot) {
int temp1 = arr[i];
arr[i] = arr[pivotInd];
arr[pivotInd] = temp1;
// Incrementing pivotIndex for further
// swapping.
pivotInd++;
}
}
// Lastly swapping or the
// correct position of pivot
int tep = arr[pivotInd];
arr[pivotInd] = arr[end];
arr[end] = tep;
return pivotInd;
}
static void SmallestLargest(int []a, int low, int high, int k, int n) {
if (low == high)
return;
else {
int pivotIndex = findRandomPivot(a, low, high);
if (k == pivotIndex) {
Console.Write(k + " smallest elements are : ");
for (int i = 0; i < pivotIndex; i++)
Console.Write(a[i] + " ");
Console.WriteLine();
Console.Write(k + " largest elements are : ");
for (int i = (n - pivotIndex); i < n; i++)
Console.Write(a[i] + " ");
}
else if (k < pivotIndex)
SmallestLargest(a, low, pivotIndex - 1, k, n);
else if (k > pivotIndex)
SmallestLargest(a, pivotIndex + 1, high, k, n);
}
}
// Driver Code
public static void Main(String[] args) {
int []a = { 11, 3, 2, 1, 15, 5, 4, 45, 88, 96, 50, 45 };
int n = a.Length;
int low = 0;
int high = n - 1;
// Lets assume k is 3
int k = 3;
// Function Call
SmallestLargest(a, low, high, k, n);
}
}
// This code is contributed by Rajput-Ji
<script>
// JavaScript code to implement the approach
//picks up last element between start and end
function findPivot( a, start, end)
{
// Selecting the pivot element
let pivot = a[end];
// Initially partition-index will be
// at starting
let pIndex = start;
for (let i = start; i < end; i++) {
// If an element is lesser than pivot, swap it.
if (a[i] <= pivot) {
let temp =a[i];
a[i]= a[pIndex];
a[pIndex] = temp;
// Incrementing pIndex for further
// swapping.
pIndex++;
}
}
// Lastly swapping or the
// correct position of pivot
let temp = a[pIndex];
a[pIndex] = a[end];
a[end] = temp;
return pIndex;
}
//THIS PART OF CODE IS CONTRIBUTED BY - rjrachit
//Picks up random pivot element between start and end
function findRandomPivot(arr, start, end)
{
let n = end - start + 1;
// Selecting the random pivot index
let pivotInd = (parseInt((Math.random()*1000000))%n);
let temp = arr[end];
arr[end] = arr[start+pivotInd];
arr[start+pivotInd] = temp;
let pivot = arr[end];
//initialising pivoting point to start index
pivotInd = start;
for (let i = start; i < end; i++) {
// If an element is lesser than pivot, swap it.
if (arr[i] <= pivot) {
let temp1 = arr[i];
arr[i]= arr[pivotInd];
arr[pivotInd] = temp1;
// Incrementing pivotIndex for further
// swapping.
pivotInd++;
}
}
// Lastly swapping or the
// correct position of pivot
let tep = arr[pivotInd];
arr[pivotInd] = arr[end];
arr[end] = tep;
return pivotInd;
}
//THIS PART OF CODE IS CONTRIBUTED BY - rjrachit
function SmallestLargest( a, low, high, k,
n)
{
if (low == high)
return;
else {
let pivotIndex = findRandomPivot(a, low, high);
if (k == pivotIndex) {
document.write(k+ " smallest elements are : ");
for (let i = 0; i < pivotIndex; i++)
document.write(a[i]+ " ");
document.write("<br/>");
document.write(k+ " largest elements are : ");
for (let i = (n - pivotIndex); i < n; i++)
document.write(a[i]+ " ");
}
else if (k < pivotIndex)
SmallestLargest(a, low, pivotIndex - 1, k, n);
else if (k > pivotIndex)
SmallestLargest(a, pivotIndex + 1, high, k, n);
}
}
// Driver code
let a = [ 11, 3, 2, 1, 15, 5, 4, 45, 88, 96, 50, 45 ];
let n = a.length;
let low = 0;
let high = n - 1;
// Lets assume k is 3
let k = 3;
// Function Call
SmallestLargest(a, low, high, k, n);
// This code is contributed by sanjoy_62.
</script>
3 smallest elements are : 3 2 1
3 largest elements are : 96 50 88