Open In App

Sorting a dynamic 2-dimensional array of Strings

Prerequisite: How to dynamically allocate a 2D array in C? 

Double pointer: A pointer pointing to another pointer is known as a Double pointer. To represent the double pointer ‘ ** ‘ is used. Double pointer is also called as pointer to pointer. Example:

Input: Geeks, Gfg,  Placement, Sudo, Gate
Output: Gate, Geeks, Gfg, Placement, Sudo

The idea is to dynamically allocate memory and values to the strings in a form of a 2-D array. Then apply bubble sort using strcmp and strcpy function. 

Implementation:




#include <cstdlib>
#include <cstring>
#include <iostream>
 
// Function to sort the values
void sort(char** names, int n)
{
    int i, j;
    // Perform sort operation using bubble sort
    for (i = 0; i < n - 1; i++)
        for (j = 0; j < n - i - 1; j++)
            if (strcmp(names[j], names[j + 1]) > 0) {
                char* temp;
                temp = (char*)calloc(30, sizeof(char));
                strcpy(temp, names[j]);
                strcpy(names[j], names[j + 1]);
                strcpy(names[j + 1], temp);
            }
}
 
// Driver code
int main()
{
    char** names;
    int n, i;
    std::cout
        << "Enter the number of names to be printed: ";
    std::cin >> n;
    // allocating memory for 1st dimension
    names = (char**)calloc(n, sizeof(char*));
 
    for (i = 0; i < n; i++)
    // allocating memory for 2nd dimension
    {
        names[i] = (char*)calloc(30, sizeof(char));
        std::cin >> names[i];
    }
    sort(names, n);
 
    std::cout << "\nArray after sorting:\n";
    for (i = 0; i < n; i++)
        std::cout << names[i] << std::endl;
 
    return 0;
}
 
//code contributed by dhanshriborse




// C program to sort an array of strings
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// Function to sort the values
void sort(char** names, int n)
{
    int i, j;
 
    // Perform sort operation using bubble sort
    for (i = 0; i < n - 1; i++)
        for (j = 0; j < n - i - 1; j++)
            if (strcmp(names[j], names[j + 1]) > 0) {
                char* temp;
                temp = (char*)calloc(30, sizeof(char));
                strcpy(temp, names[j]);
                strcpy(names[j], names[j + 1]);
                strcpy(names[j + 1], temp);
            }
}
 
// Driver code
int main()
{
    char** names;
    int n, i;
    printf("Enter the number of names to be printed: ");
    scanf("%d\n", &n);
 
    // allocating memory for 1st dimension
    names = (char**)calloc(n, sizeof(char*));
 
    for (i = 0; i < n; i++)
    // allocating memory for 2nd dimension
    {
        names[i] = (char*)calloc(30, sizeof(char));
        scanf("%s", names[i]);
    }
    sort(names, n);
 
    printf("\nArray after sorting:\n");
    for (i = 0; i < n; i++)
        printf("%s\n", names[i]);
 
    return 0;
}




// Java code
import java.util.Scanner;
 
// Function to sort the values
class GFG
{
  public static void sort(String names[], int n)
  {
    for (int i = 0; i < n - 1; i++)
    {
      for (int j = 0; j < n - i - 1; j++)
      {
        if (names[j].compareTo(names[j + 1]) > 0)
        {
          // swap arr[j+1] and arr[i]
          String temp = names[j];
          names[j] = names[j + 1];
          names[j + 1] = temp;
        }
      }
    }
  }
 
  // Driver code
  public static void main (String[] args) {
    Scanner scanner = new Scanner(System.in);
    Sort ob = new Sort();
    String names[] = new String[10];
    int n = scanner.nextInt();
    scanner.nextLine();
     
    // Input names
    for(int i = 0; i < n; i++){
      names[i] = scanner.nextLine();
    }
    ob.sort(names, n);
    System.out.println("\nArray after sorting:\n");
    for(int i = 0; i < n; i++){
      System.out.println(names[i]);
    }
  }
}
 
// This code is contributed by akashish__




# Python code
 
# Function to sort the values
def sort(names, n):
    for i in range(n-1):
        for j in range(n-i-1):
            if (names[j] > names[j+1]):
                temp = names[j]
                names[j] = names[j+1]
                names[j+1] = temp
 
# Driver code
if __name__ == '__main__':
    names = []
    n = int(input("Enter the number of names to be printed: "))
    for i in range(0, n):
        names.append(input())
    sort(names, n)
    print("\nArray after sorting:\n")
    for i in range(n):
        print(names[i])
         
# This code is contributed by akashish__




// JavaScript code
// Function to sort the values
function sort(names, n){
    for(let i=0; i<n-1; i++){
        for(let j=0; j<n-i-1; j++){
            if(names[j] > names[j+1]){
                let temp = names[j];
                names[j] = names[j+1];
                names[j+1] = temp;
            }
        }
    }
}
 
// Driver code
 
    let names = [];
    let n = parseInt(prompt("Enter the number of names to be printed: "));
    for(let i=0; i<n; i++){
        names.push(prompt());
    }
    sort(names, n);
    console.log("\nArray after sorting:\n");
    for(let i=0; i<n; i++){
        console.log(names[i]);
    }
 
 
// This code is contributed by akashish__




using System;
 
class Program {
    static void Main(string[] args) {
        string[] names;
        int n, i;
 
        Console.Write("Enter the number of names to be printed: ");
        string input = Console.ReadLine();
        while (!int.TryParse(input, out n)) {
            Console.Write("Invalid input. Please enter a valid integer: ");
            input = Console.ReadLine();
        }
 
        // allocating memory for 1st dimension
        names = new string[n];
 
        for (i = 0; i < n; i++) // allocating memory for 2nd dimension
        {
            names[i] = Console.ReadLine();
        }
 
        Sort(names, n);
        Console.WriteLine("\nArray after sorting:");
        for (i = 0; i < n; i++)
            Console.WriteLine(names[i]);
    }
 
    static void Sort(string[] names, int n) {
        int i, j;
 
        // Perform sort operation using bubble sort
        for (i = 0; i < n - 1; i++)
            for (j = 0; j < n - i - 1; j++)
                if (string.Compare(names[j], names[j + 1]) > 0) {
                    string temp;
                    temp = names[j];
                    names[j] = names[j + 1];
                    names[j + 1] = temp;
                }
    }
}

Output:


Article Tags :