Kth smallest or largest element in unsorted Array | Set 4

Given an array arr[] and a number K, where K is smaller than the size of the array, we need to find the Kth smallest element in the given array. It is given that all array elements are distinct.

Examples:

Input: arr[] = {7, 10, 4, 3, 20, 15}, K = 3
Output: 7

Input: arr[] = {7, 1, 5, 4, 20, 15, 8}, K = 5
Output: 8

We have discussed this article with other approaches as well:



Approach: The idea is to use the concept of Counting Sort. Below are the steps:

  1. Find the maximum element(say maxE) in the array and create an array(say freq[]) of length maxE + 1 and initialize it to zero.
  2. Loop through all the element in the given array and store the frequency of the element in freq[].
  3. Iterate over the array freq[] until we reach the Kth element.
  4. Print the Kth element reached in the above step.

Below is the implementation of above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program for the above approach
#include <iostream>
using namespace std;
  
// Function to find the Kth smallest
// element in Unsorted Array
int findKthSmallest(int arr[], int n,
                    int k)
{
  
    // Initialize the max Element as 0
    int max = 0;
  
    // Iterate arr[] and find the maximum
    // element in it
    for (int i = 0; i < n; i++) {
  
        if (arr[i] > max)
            max = arr[i];
    }
  
    // Frequenncy array to store
    // the frequencies
    int counter[max + 1] = { 0 };
  
    // Counter variable
    int smallest = 0;
  
    // Counting the frequencies
    for (int i = 0; i < n; i++) {
        counter[arr[i]]++;
    }
  
    // Iterate through the freq[]
    for (int num = 1; num <= max; num++) {
  
        // Check if num is present
        // in the array
        if (counter[num] > 0) {
  
            // Increment the counter
            // with the frequency
            // of num
            smallest += counter[num];
        }
  
        // Checking if we have reached
        // the Kth smallest element
        if (smallest >= k) {
  
            // Return the Kth
            // smallest element
            return num;
        }
    }
}
  
// Driver Code
int main()
{
    // Given array
    int arr[] = { 7, 1, 4, 4, 20, 15, 8 };
  
    int N = sizeof(arr) / sizeof(arr[0]);
  
    int K = 5;
  
    // Function Call
    cout << findKthSmallest(arr, N, K);
  
    return 0;
}
chevron_right

Output:
8

Time complexity: O(N) where, N is the number of element in the given array.
Auxiliary Space: O(M) where, M is the maximum element in the given array.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.





Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :
Practice Tags :