Open In App

Program to make a histogram of an array

Last Updated : 05 Aug, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

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
// CPP program to make histogram of an array 
#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 array of element is greater 
            // then array it print x 
            if (arr[j] >= i) 
                cout << " x "; 

            // else print blank spaces 
            else
                cout << " "; 
        } 
        cout << "\n"; 
    } 

    // print last line denoted by ---- 
    for (int i = 0; i < n + 3; i++) 
        cout << "---"; 

    cout << "\n"; 
    cout << "     "; 

    for (int i = 0; i < n; i++) { 
        cout.width(2); // width for a number 
        cout << right << arr[i] << " "; 
    } 
} 

// Driver code 
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
// Java program to make histogram of an array
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);
      
      // if array of element is greater
      // then array it print x
      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]);
    }
  }

  // Driver code
  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);
  }
}
Python
def print_histogram(arr, n):
    maxEle = max(arr)

    for i in range(maxEle, -1, -1):
        print(f"{i:2d} | ", end="")
        
       # if array of element is greater
      # then array it print x
        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()

    # Driver code
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) + " | ");
      
       // if array of element is greater
      // then array it print x
      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
// JS program to make histogram of an array

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 array of element is greater 
            // then array it print x 
            if (arr[j] >= i) 
                process.stdout.write(" x "); 
    
            // else print blank spaces 
            else
                process.stdout.write("   "); 
        } 
        console.log();
    } 
    
    // print last line denoted by ---- 
    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, ' ') + " "); 
    } 
}

// Driver code
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)


Next Article

Similar Reads