Program to make a histogram of an array
Last Updated :
21 Mar, 2023
Given an array of integers, print histogram of array values. Examples:
Input : 0 11 2 13 5 12 8 11 12 9
Output :
13 | x
12 | x x x
11 | x x x x x
10 | x x x x x
9 | x x x x x x
8 | x x x x x x x
7 | x x x x x x x
6 | x x x x x x x
5 | x x x x x x x x
4 | x x x x x x x x
3 | x x x x x x x x
2 | x x x x x x x x x
1 | x x x x x x x x x
0 | x x x x x x x x x x
---------------------------------------
0 11 2 13 5 12 8 11 12 9
Input : 10 9 12 4 5 2 8 5 3 1
Output :
12 | x
11 | x
10 | x x
9 | x x x
8 | x x x x
7 | x x x x
6 | x x x x
5 | x x x x x x
4 | x x x x x x x
3 | x x x x x x x x
2 | x x x x x x x x x
1 | x x x x x x x x x x
0 | x x x x x x x x x x
---------------------------------------
10 9 12 4 5 2 8 5 3 1
The idea is to print the given histogram row by row. For every element, we check if it is greater than or equal to current row. If yes, put a ‘x’ for that element. Else we put a space.
CPP
#include <bits/stdc++.h>
using namespace std;
void printHistogram( int arr[], int n)
{
int maxEle = *max_element(arr, arr + n);
for ( int i = maxEle; i >= 0; i--) {
cout.width(2);
cout << right << i << " | " ;
for ( int j = 0; j < n; j++) {
if (arr[j] >= i)
cout << " x " ;
else
cout << " " ;
}
cout << "\n" ;
}
for ( int i = 0; i < n + 3; i++)
cout << "---" ;
cout << "\n" ;
cout << " " ;
for ( int i = 0; i < n; i++) {
cout.width(2);
cout << right << arr[i] << " " ;
}
}
int main()
{
int arr[10] = { 10, 9, 12, 4, 5, 2,
8, 5, 3, 1 };
int n = sizeof (arr) / sizeof (arr[0]);
printHistogram(arr, n);
return 0;
}
|
Java
import java.util.Arrays;
class Main {
static void printHistogram( int [] arr, int n) {
int maxEle = Arrays.stream(arr).max().getAsInt();
for ( int i = maxEle; i >= 0 ; i--) {
System.out.format( "%2d | " , i);
for ( int j = 0 ; j < n; j++) {
if (arr[j] >= i) {
System.out.print( " x " );
} else {
System.out.print( " " );
}
}
System.out.println();
}
for ( int i = 0 ; i < n + 3 ; i++) {
System.out.print( "---" );
}
System.out.println();
System.out.print( " " );
for ( int i = 0 ; i < n; i++) {
System.out.format( "%2d " , arr[i]);
}
}
public static void main(String[] args) {
int [] arr = { 10 , 9 , 12 , 4 , 5 , 2 , 8 , 5 , 3 , 1 };
int n = arr.length;
printHistogram(arr, n);
}
}
|
Python3
def print_histogram(arr, n):
maxEle = max (arr)
for i in range (maxEle, - 1 , - 1 ):
print (f "{i:2d} | " , end = "")
for j in range (n):
if arr[j] > = i:
print ( " x " , end = "")
else :
print ( " " , end = "")
print ()
for i in range (n + 3 ):
print ( "---" , end = "")
print ()
print ( " " , end = "")
for i in range (n):
print (f "{arr[i]:2d} " , end = "")
print ()
arr = [ 10 , 9 , 12 , 4 , 5 , 2 , 8 , 5 , 3 , 1 ]
n = len (arr)
print_histogram(arr, n)
|
C#
using System;
using System.Collections.Generic;
using System.Linq;
class Gfg
{
static void PrintHistogram( int [] arr, int n)
{
int maxEle = arr.Max();
for ( int i = maxEle; i >= 0; i--)
{
Console.Write(i.ToString().PadLeft(2) + " | " );
for ( int j = 0; j < n; j++)
{
if (arr[j] >= i)
Console.Write( " x " );
else
Console.Write( " " );
}
Console.WriteLine();
}
for ( int i = 0; i < n + 3; i++)
Console.Write( "---" );
Console.WriteLine();
Console.Write( " " );
for ( int i = 0; i < n; i++)
{
Console.Write(arr[i].ToString().PadLeft(2) + " " );
}
}
static void Main( string [] args)
{
int [] arr = { 10, 9, 12, 4, 5, 2, 8, 5, 3, 1 };
int n = arr.Length;
PrintHistogram(arr, n);
}
}
|
Javascript
function printHistogram(arr) {
let n = arr.length;
let maxEle = Math.max(...arr);
for (let i = maxEle; i >= 0; i--) {
process.stdout.write(i.toString().padStart(2, ' ' ) + " | " );
for (let j = 0; j < n; j++) {
if (arr[j] >= i)
process.stdout.write( " x " );
else
process.stdout.write( " " );
}
console.log();
}
for (let i = 0; i < n + 3; i++)
process.stdout.write( "---" );
console.log();
process.stdout.write( " " );
for (let i = 0; i < n; i++) {
process.stdout.write(arr[i].toString().padStart(2, ' ' ) + " " );
}
}
let arr = [10, 9, 12, 4, 5, 2, 8, 5, 3, 1];
printHistogram(arr);
|
Output:
12 | x
11 | x
10 | x x
9 | x x x
8 | x x x x
7 | x x x x
6 | x x x x
5 | x x x x x x
4 | x x x x x x x
3 | x x x x x x x x
2 | x x x x x x x x x
1 | x x x x x x x x x x
0 | x x x x x x x x x x
---------------------------------------
10 9 12 4 5 2 8 5 3 1
Time complexity: O(N*maxEle) where N is size of given array and maxEle is maximum element in the array
Auxiliary space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...