Sort an array of large numbers

29 Mar, 2022
Given an array of numbers where every number is represented as string. The numbers may be very large (may not fit in long long int), the task is to sort these numbers.Examples:  
Input : arr[] = {"5", "1237637463746732323", "12" };
Output : arr[] = {"5", "12", "1237637463746732323"};

Input : arr[] = {"50", "12", "12", "1"};
Output : arr[] = {"1", "12", "12", "50"};
Below is the implementation of the above idea. 
C++
Java
Python3
C#
Javascript
// 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 stringsvoid sortLargeNumbers(string arr[], int n){   sort(arr, arr+n, compareNumbers);} // Driver codeint 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 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 program to sort large numbers# represented as strings # Function for sort an array of large# numbers represented as stringsdef sortLargeNumbers (arr, n):     arr.sort(key = int) # Driver Codeif __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# 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
<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>
Output:  
5 12 97987 1237637463746732323 
Time complexity: O(k * n Log n), Here assumption is that the sort() function uses a O(n Log n) sorting algorithm.
Auxiliary Space: O(1)
Similar Post: Sorting Big IntegersThis article is contributed by DANISH KALEEM. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
princiraj1992
himanshu77
sanjoy_62
surindertarika1234
prophet1999
large-numbers
Sorting
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.