Open In App

Program to make a histogram of an array

Last Updated : 21 Mar, 2023
Improve
Improve
Like Article
Like
Save
Share
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);
  }
}


Python3




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)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads