Ordenar una array de números grandes

Dada una array de números donde cada número se representa como una string. Los números pueden ser muy grandes (pueden no caber en long long int), la tarea es ordenar estos números.
Ejemplos: 
 

Input : arr[] = {"5", "1237637463746732323", "12" };
Output : arr[] = {"5", "12", "1237637463746732323"};

Input : arr[] = {"50", "12", "12", "1"};
Output : arr[] = {"1", "12", "12", "50"};

A continuación se muestra la implementación de la idea anterior.
 

C++

// C++ program to sort large numbers represented
// as strings.
#include<bits/stdc++.h>
using namespace std;
 
// Returns true if str1 is smaller than str2.
bool compareNumbers(string str1, string str2)
{
    // Calculate lengths of both string
    int n1 = str1.length(), n2 = str2.length();
 
    if (n1 < n2)
       return true;
    if (n2 < n1)
       return false;
 
    // If lengths are same
    for (int i=0; i<n1; i++)
    {
       if (str1[i] < str2[i])
          return true;
       if (str1[i] > str2[i])
          return false;
    }
 
    return false;
}
 
// Function for sort an array of large numbers
// represented as strings
void sortLargeNumbers(string arr[], int n)
{
   sort(arr, arr+n, compareNumbers);
}
 
// Driver code
int main()
{
    string arr[] = {"5", "1237637463746732323",
                    "97987", "12" };
    int n = sizeof(arr)/sizeof(arr[0]);
 
    sortLargeNumbers(arr, n);
 
    for (int i=0; i<n; i++)
      cout << arr[i] << " ";
 
    return 0;
}

Java

// Java program to sort large numbers represented
// as strings.
import java.io.*;
import java.util.*;
 
class main
{
    // Function for sort an array of large numbers
    // represented as strings
    static void sortLargeNumbers(String arr[])
    {
        // Refer below post for understanding below expression:
        // https://www.geeksforgeeks.org/lambda-expressions-java-8/
        Arrays.sort(arr, (left, right) ->
        {
            /* If length of left != right, then return
               the diff of the length else  use compareTo
               function to compare values.*/
            if (left.length() != right.length())
                return left.length() - right.length();
             return left.compareTo(right);
        });
    }
 
    // Driver code
    public static void main(String args[])
    {
        String arr[] = {"5", "1237637463746732323",
                        "97987", "12" };
        sortLargeNumbers(arr);
        for (String s : arr)
            System.out.print(s + " ");
    }
}

Python3

# Python3 program to sort large numbers
# represented as strings
 
# Function for sort an array of large
# numbers represented as strings
def sortLargeNumbers (arr, n):
 
    arr.sort(key = int)
 
# Driver Code
if __name__ == '__main__':
 
    arr = [ "5", "1237637463746732323",
            "97987", "12" ]
    n = len(arr)
 
    sortLargeNumbers(arr, n)
 
    for i in arr:
        print(i, end = ' ')
     
# This code is contributed by himanshu77

C#

// C# program to sort large numbers
// represented as strings.
using System;
 
class GFG
{
 
    // Function for sort an array of large
    // numbers represented as strings
    static void sortLargeNumbers(String []arr)
    {
        // Refer below post for understanding 
        // below expression:
        // https://www.geeksforgeeks.org/lambda-expressions-java-8/
        for(int i = 0; i < arr.Length - 1; i++)
        {
            /* If length of left != right, then
            return the diff of the length else
            use compareTo function to compare values.*/
            String left = arr[i], right = arr[i + 1];
            if (left.Length > right.Length)
            {
                arr[i] = right;
                arr[i + 1] = left;
                i -= 2;
            }
        }
    }
 
    // Driver code
    public static void Main()
    {
        String []arr = {"5", "1237637463746732323",
                        "97987", "12" };
        sortLargeNumbers(arr);
        foreach (String s in arr)
            Console.Write(s + " ");
    }
}
 
// This code is contributed by PrinciRaj1992

Javascript

<script>
 
// JavaScript program to sort large numbers
// represented as strings.
 
    // Function for sort an array of large numbers
    // represented as strings
    function sortLargeNumbers(arr)
    {
         // Refer below post for understanding 
        // below expression:
        // https://www.geeksforgeeks.org/lambda-expressions-java-8/
        for(let i = 0; i < arr.length - 1; i++)
        {
            /* If length of left != right, then
            return the diff of the length else
            use compareTo function to compare values.*/
            let left = arr[i], right = arr[i + 1];
            if (left.length > right.length)
            {
                arr[i] = right;
                arr[i + 1] = left;
                i -= 2;
            }
        }
    }
 
// Driver Code
     let arr = ["5", "1237637463746732323",
                        "97987", "12" ];
        sortLargeNumbers(arr);
        for (let s in arr)
            document.write(arr[s] + " ");
 
</script>

Producción:  

5 12 97987 1237637463746732323 

Complejidad de tiempo: O(k * n Log n), aquí se supone que la función sort() usa un algoritmo de clasificación O(n Log n).

Espacio Auxiliar: O(1)

Publicación similar: 
ordenar números enteros grandes
Este artículo es una contribución de DANISH KALEEM . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *