 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<``int``> brr(arr, arr + n);`   `    ``// Sorting the vector in descending` `    ``// order. Please refer below link for` `    ``// details` `    ``// https://www.geeksforgeeks.org/sort-c-stl/` `    ``sort(brr.begin(), brr.end(), greater<``int``>());`   `    ``// 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<``int``>()))` `            ``cout << arr[i] << ``" "``;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `arr[] = { 50, 8, 45, 12, 25, 40, 84 };` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);` `    ``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