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 <algorithm>
    #include <iostream>
    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).



    My Personal Notes arrow_drop_up

    Discovering ways to develop a plane for soaring career goals

    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.