Open In App

Sorting a dynamic 2-dimensional array of Strings

Last Updated : 27 Mar, 2023
Comments
Improve
Suggest changes
Like Article
Like
Report

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:

C++
#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
// 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
// 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__
Python3
# 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
// 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__
C#
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:


Next Article
Article Tags :
Practice Tags :

Similar Reads