Print n smallest elements from given array in their original order

We are given an array of m-elements, we need to find n smallest elements from the array but they must be in the same order as they are in given array.

Examples:

Input : arr[] = {4, 2, 6, 1, 5}, 
        n = 3
Output : 4 2 1
Explanation : 
1, 2 and 4 are 3 smallest numbers and
4 2 1 is their order in given array.

Input : arr[] = {4, 12, 16, 21, 25},
        n = 3
Output : 4 12 16
Explanation : 
4, 12 and 16 are 3 smallest numbers and 
4 12 16 is their order in given array.

Make a copy of original array and then sort copy array. After sorting the copy array, save all n smallest numbers. Further for each element in original array, check whether it is in n-smallest number or not if it present in n-smallest array then print it otherwise move forward.



  • Make copy_arr[]
  • sort(copy_arr)
  • For all elements in arr[] -
    • Find arr[i] in n-smallest element of copy_arr
    • If found then print the element
  • Below is the implementation of above approach :

    C++

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP for printing smallest n number in order
    #include <bits/stdc++.h>
    using namespace std;
      
    // Function to print smallest n numbers
    void printSmall(int arr[], int asize, int n)
    {
        // Make copy of array
        vector<int> copy_arr(arr, arr + asize);
      
        // Sort copy array
        sort(copy_arr.begin(), copy_arr.begin() + asize);
      
        // For each arr[i] find whether
        // it is a part of n-smallest
        // with binary search
        for (int i = 0; i < asize; ++i)
            if (binary_search(copy_arr.begin(), 
                    copy_arr.begin() + n, arr[i]))
                cout << arr[i] << " ";
    }
      
    // Driver program
    int main()
    {
        int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
        int asize = sizeof(arr) / sizeof(arr[0]);    
        int n = 5;
        printSmall(arr, asize, n);
        return 0;
    }

    chevron_right

    
    

    Java

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java for printing smallest n number in order
    import java.util.*;
      
    class GFG 
    {
      
      
    // Function to print smallest n numbers
    static void printSmall(int arr[], int asize, int n)
    {
        // Make copy of array
        int []copy_arr = Arrays.copyOf(arr,asize);
      
        // Sort copy array
        Arrays.sort(copy_arr);
      
        // For each arr[i] find whether
        // it is a part of n-smallest
        // with binary search
        for (int i = 0; i < asize; ++i)
        {
            if (Arrays.binarySearch(copy_arr,0,n, arr[i])>-1)
                System.out.print(arr[i] + " ");
        }
    }
      
    // Driver code
    public static void main(String[] args) 
    {
        int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
        int asize = arr.length; 
        int n = 5;
        printSmall(arr, asize, n);
    }
    }
      
    // This code is contributed by Princi Singh

    chevron_right

    
    

    Python3

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    # Python3 for printing smallest n number in order
      
    # Function for binary_search
    def binary_search(arr, low, high, ele):
        while low < high:
            mid = (low + high) // 2
            if arr[mid] == ele:
                return mid
            elif arr[mid] > ele:
                high = mid
            else:
                low = mid + 1
        return -1
      
    # Function to print smallest n numbers
    def printSmall(arr, asize, n):
      
        # Make copy of array
        copy_arr = arr.copy()
      
        # Sort copy array
        copy_arr.sort()
      
        # For each arr[i] find whether
        # it is a part of n-smallest
        # with binary search
        for i in range(asize):
            if binary_search(copy_arr, low = 0
                             high = n, ele = arr[i]) > -1:
                print(arr[i], end = " ")
      
    # Driver Code
    if __name__ == "__main__":
        arr = [1, 5, 8, 9, 6, 7, 3, 4, 2, 0]
        asize = len(arr)
        n = 5
        printSmall(arr, asize, n)
      
    # This code is conributed by
    # sanjeev2552

    chevron_right

    
    

    C#

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C# for printing smallest n number in order
    using System;     
      
    class GFG 
    {
      
      
    // Function to print smallest n numbers
    static void printSmall(int []arr, int asize, int n)
    {
        // Make copy of array
        int []copy_arr = new int[asize];
        Array.Copy(arr, copy_arr, asize);
      
        // Sort copy array
        Array.Sort(copy_arr);
      
        // For each arr[i] find whether
        // it is a part of n-smallest
        // with binary search
        for (int i = 0; i < asize; ++i)
        {
            if (Array.BinarySearch(copy_arr, 0, n, arr[i])>-1)
                Console.Write(arr[i] + " ");
        }
    }
      
    // Driver code
    public static void Main(String[] args) 
    {
        int []arr = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
        int asize = arr.Length; 
        int n = 5;
        printSmall(arr, asize, n);
    }
    }
      
    // This code has been contributed by 29AjayKumar

    chevron_right

    
    

    Output :

    1 3 4 2 0 
    

    For making a copy of array we need space complexity of O(n) and then for sorting we will need complexity of order O(n log n). Further for each element in arr[] we are performing searching in copy_arr[], which will result O(n) for linear search but we can improve it by applying binary search and hence our overall time complexity will be O(n log n).

    GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details




    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.