Efficient way to initialize a priority queue
STL Priority Queue is the implementation of Heap Data Structure. By default, it’s a max heap, and can be easily for primitive data types. There are some important applications of it which can be found in this article.
Priority queue can be initialized in two ways either by pushing all elements one by one or by initializing using their constructor. In this article, we will discuss both methods and examine their time complexities.
Method 1: The simplest approach is to traverse the given array and push each element one by one in the priority queue. In this method, the push method in the priority queue takes O(log N) time. Where N is the number of elements in the array.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[] = { 15, 25, 6, 54, 45, 26, 12 };
int N = sizeof (arr) / sizeof (arr[0]);
priority_queue< int > pq;
for ( int i = 0; i < N; i++) {
pq.push(arr[i]);
}
cout << "The elements in priority"
<< " Queue are: " ;
while (!pq.empty()) {
cout << pq.top() << " " ;
pq.pop();
}
return 0;
}
|
Java
import java.util.*;
public class GFG
{
public static void main(String[] args)
{
int [] arr = { 15 , 25 , 6 , 54 , 45 , 26 , 12 };
int N = arr.length;
Vector<Integer> pq = new Vector<Integer>();
for ( int i = 0 ; i < N; i++)
{
pq.add(arr[i]);
}
Collections.sort(pq);
Collections.reverse(pq);
System.out.print( "The elements in priority" + " Queue are: " );
while (pq.size() > 0 )
{
System.out.print(pq.get( 0 ) + " " );
pq.remove( 0 );
}
}
}
|
Python3
if __name__ = = '__main__' :
arr = [ 15 , 25 , 6 , 54 , 45 , 26 , 12 ]
N = len (arr)
pq = []
for i in range (N):
pq.append(arr[i])
print ( "The elements in priority Queue are: " , end = "")
pq = sorted (pq)
while ( len (pq) > 0 ):
print (pq[ - 1 ], end = " " )
del pq[ - 1 ]
|
C#
using System;
using System.Collections.Generic;
class GfG
{
public static void Main()
{
int [] arr = { 15, 25, 6, 54, 45, 26, 12 };
int N = arr.Length;
List< int > pq = new List< int >();
for ( int i = 0; i < N; i++) {
pq.Add(arr[i]);
}
pq.Sort();
pq.Reverse();
Console.Write( "The elements in priority" + " Queue are: " );
while (pq.Count > 0) {
Console.Write(pq[0] + " " );
pq.RemoveAt(0);
}
}
}
|
Javascript
<script>
let arr = [ 15, 25, 6, 54, 45, 26, 12 ];
let N = arr.length;
let pq = [];
for (let i = 0; i < N; i++) {
pq.push(arr[i]);
}
pq.sort( function (a, b){ return a - b});
pq.reverse();
document.write( "The elements in priority" + " Queue are: " );
while (pq.length > 0) {
document.write(pq[0] + " " );
pq.shift();
}
</script>
|
Output:
The elements in priority Queue are: 54 45 26 25 15 12 6
Time Complexity: O(N*log N), where N is the total number of elements in the array.
Auxiliary Space: O(N)
Method 2: In this method, copy all the array elements into the priority queue while initializing it (this copying will be happened using the copy constructor of priority_queue). In this method, the priority_queue will use the build heap method internally. So the build heap method is taking O(N) time.
Syntax:
priority_queue<int> pq(address of the first element, address of the next of the last element);
Syntax for the array:
priority_queue<int> pq (arr, arr + N)
where arr is the array and N is the size of the array.
Syntax for the vector:
priority_queue<int> pq(v.begin(), v.end());
where v is the vector.
Below is the implementation of the above approach:
C++
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int arr[] = { 15, 25, 6, 54, 45, 26, 12 };
int N = sizeof (arr) / sizeof (arr[0]);
cout << "The elements in priority"
<< " Queue are: " ;
priority_queue< int > pq(arr, arr + N);
while (!pq.empty()) {
cout << pq.top() << " " ;
pq.pop();
}
return 0;
}
|
Java
import java.util.*;
class GFG {
public static void main(String[] args)
{
Integer[] arr = { 15 , 25 , 6 , 54 , 45 , 26 , 12 };
int N = arr.length;
System.out.println( "The elements in priority"
+ " Queue are: " );
ArrayList<Integer> l = new ArrayList<Integer>();
Collections.addAll(l, arr);
Collections.sort(l);
while (l.size() != 0 ) {
System.out.print(l.get(l.size() - 1 ) + " " );
l.remove(l.size() - 1 );
}
}
}
|
Python3
if __name__ = = '__main__' :
arr = [ 15 , 25 , 6 , 54 , 45 , 26 , 12 ]
N = len (arr)
print ( "The elements in priority Queue are: " , end = '')
pq = arr
pq.sort()
while ( len (pq) ! = 0 ):
print (pq[ - 1 ], end = ' ' )
pq.pop()
|
C#
using System;
using System.Collections;
using System.Collections.Generic;
class GFG{
public static void Main( string [] args)
{
int []arr= { 15, 25, 6, 54, 45, 26, 12 };
int N = arr.Length;
Console.Write( "The elements in priority"
+ " Queue are: " );
List< int > l = new List< int >(arr);
l.Sort();
while (l.Count!=0) {
Console.Write(l[l.Count-1]+ " " );
l.RemoveAt(l.Count-1);
}
}
}
|
Javascript
<script>
let arr = [ 15, 25, 6, 54, 45, 26, 12 ];
let N = arr.length;
document.write( "The elements in priority Queue are: " )
let pq = arr;
pq.sort( function (a, b){ return a - b;});
while (pq.length != 0)
document.write(pq.pop()+ " " );
</script>
|
Output:
The elements in priority Queue are: 54 45 26 25 15 12 6
Time Complexity: O(N), where N is the total number of elements in the array.
Auxiliary Space: O(N)
Last Updated :
22 Jun, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...