Open in App
Not now

# C++ Program to Find k maximum elements of array in original order

• Last Updated : 15 Jul, 2022

Given an array arr[] and an integer k, we need to print k maximum elements of given array. The elements should printed in the order of the input.
Note : k is always less than or equal to n.

Examples:

Input : arr[] = {10 50 30 60 15}
k = 2
Output : 50 60
The top 2 elements are printed
as per their appearance in original
array.

Input : arr[] = {50 8 45 12 25 40 84}
k = 3
Output : 50 45 84

Method 1: We search for the maximum element k times in the given array. Each time we find one maximum element, we print it and replace it with minus infinite (INT_MIN in C) in the array. The time complexity of this method is O(n*k).

## C++

 // C++ program to find k Maximum elements #include using namespace std;   // Function to print k Maximum elements void printMax(int a[], int n, int k) {     int b[n],c[n];           // Coping the array a     // into c and initialising     // elements in array b as 0.     for(int i=0;imaxi)             {                 maxi=a[j];                 index=j;             }         }         // Assigning 1 in order         // to mark the position         // of all k maximum numbers         b[index]=1;         a[index]=INT_MIN;     }           for(int i=0;i

Output

50 45 84

Time Complexity: O(n*k)
Auxiliary Space: O(n)

Method 2: In this method, we store the original array in a new array and will sort the new array in descending order. After sorting, we iterate the original array from 0 to n and print all those elements that appear in first k elements of new array. For searching, we can do Binary Search.

## C++

 // C++ program to find k maximum elements // of array in original order #include using namespace std;   // Function to print m Maximum elements void printMax(int arr[], int k, int n) {     // vector to store the copy of the     // original array     vector brr(arr, arr + n);       // Sorting the vector in descending     // order. Please refer below link for     // details     sort(brr.begin(), brr.end(), greater());       // Traversing through original array and     // printing all those elements that are     // in first k of sorted vector.     // Please refer https://goo.gl/44Rwgt     // for details of binary_search()     for (int i = 0; i < n; ++i)         if (binary_search(brr.begin(),                  brr.begin() + k, arr[i],                         greater()))             cout << arr[i] << " "; }   // Driver code int main() {     int arr[] = { 50, 8, 45, 12, 25, 40, 84 };     int n = sizeof(arr) / sizeof(arr[0]);     int k = 3;     printMax(arr, k, n);     return 0; }

Output:

50 45 84

Time Complexity: O(n Log n) for sorting.
Auxiliary Space: O(n)

Please refer complete article on Find k maximum elements of array in original order for more details!

My Personal Notes arrow_drop_up
Related Articles