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.




My Personal Notes arrow_drop_up

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.