C Programma per ordinare un array in base alla frequenza

C Programma per ordinare un array in base alla frequenza

L'ordinamento di un array in base alla sua frequenza significa che l'elemento verrà ordinato in ordine decrescente di frequenza. Qui, ci viene fornito un array e il nostro compito è ordinare l'array in base alla loro frequenza.

Ma prima di andare avanti, se non hai familiarità con il concetto di array in C, controlla l'articolo sugli array in C.

Input: Inserisci la matrice:2 4 3 5 4 2 3 1 2

Risultato: Matrice ordinata per frequenza:2 2 2 4 4 3 3 5 1

Spiegazione:qui, 2 si sono verificati 3 volte, 4 si sono verificati 4 volte, 3 si sono verificati 3 volte, 5 si sono verificati solo una volta e 1 si è verificato anche solo una volta.

Programma 1:ordina un array per frequenza

In questo metodo, nel metodo principale stesso, dichiariamo l'array e contiamo la frequenza di ciascun elemento. Quindi, ordiniamo gli elementi dell'array in base alla loro frequenza. Alla fine, mostra l'array risultante.

Algoritmo

  1. Inizia
  2. Dichiara due array.
  3. Inizializza il primo array.
  4. Calcola la frequenza di ciascun elemento e poi memorizzala nell'array di frequenze.
  5. Visualizza l'elemento dell'array e la frequenza corrispondente.
  6. Ora ordina l'array di frequenza e visualizza il risultato insieme all'elemento dell'array corrispondente.
  7. Ferma.

Nel programma seguente, prima dichiariamo un array e poi nel programma principale stesso, troviamo la frequenza di ciascun elemento. Quindi memorizziamo la frequenza di ogni elemento univoco nel nuovo array. Successivamente, visualizziamo l'array ordinato in base alla loro frequenza.

#include <stdio.h>
#define MAX 256
int main ()
{
  int arr[MAX][2], brr[MAX][2];
  int k = 0, n, temp, count;
  //Initialize array size
  printf ("\nEnter the number of elements:\n");
  scanf ("%d", &n);
  //Initialize array elements 
  printf ("\nEnter the array elements :\n");
  for (int i = 0; i < n; i++)
    {
      scanf ("%d", &arr[i][0]);
      arr[i][1] = 0;
    }
  // Unique elements and its frequency are stored in another array
  for (int i = 0; i < n; i++)
    {
      if (arr[i][1])
	continue;
      count = 1;
      for (int j = i + 1; j < n; j++)
	{
	  if (arr[i][0] == arr[j][0])
	    {
	      arr[j][1] = 1;
	      count++;
	    }
	}
      brr[k][0] = arr[i][0];
      brr[k][1] = count;
      k++;
    }
  n = k;
  //Print the elements and its frequency
  printf ("\nArray Elements and its frequency:\n");
  printf (" \nElements   Frequency\n");
  for (int i = 0; i < n; i++)
    {
      printf ("   %d          %d \n", brr[i][0], brr[i][1]);
    }
  //Store the array and its frequency in sorted form
  for (int i = 0; i < n - 1; i++)
    {
      temp = brr[i][1];
      for (int j = i + 1; j < n; j++)
	{
	  if (temp < brr[j][1])
	    {
	      temp = brr[j][1];
	      brr[j][1] = brr[i][1];
	      brr[i][1] = temp;

	      temp = brr[j][0];
	      brr[j][0] = brr[i][0];
	      brr[i][0] = temp;
	    }
	}
    }
  //Print the sorted array and its frequency
  printf ("\nSorted Array Elements based on their frequency:\n");
  printf (" Elements   Frequency\n");
  for (int i = 0; i < n; i++)
    {
      printf ("   %d          %d    \n", brr[i][0], brr[i][1]);
    }
  //Print the sorted array based on its frequency
  printf ("\n Sorted Array based on its frequency:\n");
  for (int i = 0; i < n; i++)
    {
      while (brr[i][1] != 0)
	{
	  printf (" %d  ", brr[i][0]);
	  brr[i][1]--;
	}
    }
  return 0;
}


Inserisci il numero di elementi:10

Inserisci gli elementi dell'array:2 4 3 2 1 8 3 3 7 2

Elementi dell'array e relativa frequenza:

Frequenza elementi
2 3
4 1
3 3
1 1
8 1
7 1

Elementi array ordinati in base alla loro frequenza:
Frequenza elementi
2 3
3 3
4 1
1 1
8 1
7 1

Matrice ordinata in base alla sua frequenza:
2 2 2 3 3 3 4 1 8 7

Programma 2:ordina un array per frequenza

In questo metodo, chiameremo una funzione che eseguirà azioni come contare la frequenza di ciascun elemento nell'array, quindi ordinare l'array in base alla loro frequenza. Dopo aver ordinato l'array, visualizza l'array risultante.

Algoritmo

  1. Inizia
  2. Dichiara due array.
  3. Inizializza il primo array.
  4. Chiama una funzione che ordinerà l'array in base alla sua frequenza.
  5. Calcola la frequenza di ciascun elemento e poi memorizzala nell'array di frequenze.
  6. Visualizza l'elemento dell'array e la frequenza corrispondente.
  7. Ora ordina l'array di frequenza e visualizza il risultato insieme all'elemento dell'array corrispondente.
  8. Ferma.

Di seguito è riportato il codice per lo stesso.

Nel programma seguente, prima dichiariamo un array e quindi chiamiamo una funzione per trovare la frequenza di ciascun elemento. Quindi memorizziamo la frequenza di ogni elemento univoco nel nuovo array. Successivamente, visualizziamo l'array ordinato in base alla loro frequenza.

#include <stdio.h>
#define MAX 256
void sortArray (int arr[MAX][2], int n, int brr[MAX][2])
{
  int k = 0, temp, count;
  // Unique elements and its frequency are stored in another array
  for (int i = 0; i < n; i++)
    {
      if (arr[i][1])
	continue;
      count = 1;
      for (int j = i + 1; j < n; j++)
	{
	  if (arr[i][0] == arr[j][0])
	    {
	      arr[j][1] = 1;
	      count++;
	    }
	}
      brr[k][0] = arr[i][0];
      brr[k][1] = count;
      k++;
    }
  n = k;
  //Print the elements and its frequency
  printf ("\nArray Elements and its frequency:\n");
  printf (" \nElements   Frequency\n");
  for (int i = 0; i < n; i++)
    {
      printf ("   %d          %d \n", brr[i][0], brr[i][1]);
    }
  //Store the array and its frequency in sorted form
  for (int i = 0; i < n - 1; i++)
    {
      temp = brr[i][1];
      for (int j = i + 1; j < n; j++)
	{
	  if (temp < brr[j][1])
	    {
	      temp = brr[j][1];
	      brr[j][1] = brr[i][1];
	      brr[i][1] = temp;

	      temp = brr[j][0];
	      brr[j][0] = brr[i][0];
	      brr[i][0] = temp;
	    }
	}
    }
  //Print the sorted array and its frequency
  printf ("\nSorted Array Elements based on their frequency:\n");
  printf (" Elements   Frequency\n");
  for (int i = 0; i < n; i++)
    {
      printf ("   %d          %d    \n", brr[i][0], brr[i][1]);
    }
  //Print the sorted array based on its frequency
  printf ("\n Sorted Array based on its frequency:\n");
  for (int i = 0; i < n; i++)
    {
      while (brr[i][1] != 0)
	{
	  printf (" %d  ", brr[i][0]);
	  brr[i][1]--;

	}
    }
}
int main ()
{
  int arr[MAX][2], brr[MAX][2];
  int n;
  //Initialize array size
  printf ("\nEnter the number of elements:\n");
  scanf ("%d", &n);
  //Initialize array elements 
  printf ("\nEnter the array elements :\n");
  for (int i = 0; i < n; i++)
    {
      scanf ("%d", &arr[i][0]);
      arr[i][1] = 0;
    }
  sortArray (arr, n, brr);
  return 0;
}


Inserisci il numero di elementi:10

Inserisci gli elementi dell'array:8 7 6 8 9 4 5 6 8 8

Elementi dell'array e relativa frequenza:

Frequenza elementi
8 4
7 1
6 2
9 1
4 1
5 1

Elementi array ordinati in base alla loro frequenza:
Frequenza elementi
8 4
6 2
7 1
9 1
4 1
5 1

Matrice ordinata in base alla sua frequenza:
8 8 8 8 6 6 7 9 4 5