Sorting Big Integers

21 Apr, 2022
Given a array of n positive integers where each integer can have digits upto 106, print the array elements in ascending order.  
Input: arr[] = {54, 724523015759812365462, 870112101220845, 8723} 
Output: 54 8723 870112101220845 724523015759812365462
Explanation:
All elements of array are sorted in non-descending(i.e., ascending)
order of their integer value

Input: arr[] = {3643641264874311, 451234654453211101231,
                4510122010112121012121}
Output: 3641264874311 451234654453211101231 4510122010112121012121
 
A naive approach is to use arbitrary precision data type such as int in python or Biginteger class in Java. But that approach will not be fruitful because internal conversion of string to int and then perform sorting will leads to slow down the calculations of addition and multiplications in binary number system.Efficient Solution : As size of integer is very large even it can’t be fit in long long data type of C/C++, so we just need to input all numbers as strings and sort them using a comparison function. Following are the key points compare function:-  
If lengths of two strings are different, then we need to compare lengths to decide sorting order.If Lengths are same then we just need to compare both the strings in lexicographically order.
If lengths of two strings are different, then we need to compare lengths to decide sorting order.
If Lengths are same then we just need to compare both the strings in lexicographically order.
Assumption : There are no leading zeros. 
C++
Python
Javascript
// Below is C++ code to sort the Big integers in// ascending order#include<bits/stdc++.h>using namespace std; // comp function to perform sortingbool comp(const string &left, const string &right){    // if length of both string are equals then sort    // them in lexicographically order    if (left.size() == right.size())        return left < right;     // Otherwise sort them according to the length    // of string in ascending order    else        return left.size() < right.size();} // Function to sort arr[] elements according// to integer valuevoid SortingBigIntegers(string arr[], int n){    // Copy the arr[] elements to sortArr[]    vector<string> sortArr(arr, arr + n);     // Inbuilt sort function using function as comp    sort(sortArr.begin(), sortArr.end(), comp);     // Print the final sorted array    for (auto &ele : sortArr)        cout << ele << " ";} // Driver code of above implementationint main(){    string arr[] = {"54", "724523015759812365462",                    "870112101220845", "8723"};    int n = sizeof(arr) / sizeof(arr[0]);     SortingBigIntegers(arr, n);     return 0;}
# Below is Python code to sort the Big integers# in ascending orderdef SortingBigIntegers(arr, n):     # Direct sorting using lambda operator  # and length comparison  arr.sort(key = lambda x: (len(x), x)) # Driver code of above implementationarr = ["54", "724523015759812365462",        "870112101220845", "8723"]n = len(arr) SortingBigIntegers(arr, n) # Print the final sorted list using# join methodprint " ".join(arr)
<script>// Below is Javascript code to sort the Big integers in// ascending order // comp function to perform sortingfunction comp(left, right){     // if length of both string are equals then sort    // them in lexicographically order    if (left.length == right.length)        return left < right;     // Otherwise sort them according to the length    // of string in ascending order    else        return left.length - right.length;} // Function to sort arr[] elements according// to integer valuefunction SortingBigIntegers(arr, n){     // Copy the arr[] elements to sortArr[]    let sortArr = [...arr]     // Inbuilt sort function using function as comp     sortArr.sort(comp);     // Print the final sorted array    for (ele of sortArr)        document.write(ele + " ");} // Driver code of above implementationlet arr = ["54", "724523015759812365462",    "870112101220845", "8723"]let n = arr.length SortingBigIntegers(arr, n); // This code is contributed by gfgking.</script>
Output: 54 8723 870112101220845 724523015759812365462
Time complexity: O(sum * log(n)) where sum is the total sum of all string length and n is size of array Auxiliary space: O(n)Similar Post : Sort an array of large numbersThis article is contributed by Shubham Bansal. 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. 
gfgking
surinderdawra388
large-numbers
Sorting
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Count Inversions in an array | Set 1 (Using Merge Sort)
Merge two sorted arrays
Chocolate Distribution Problem
Sort an array of 0s, 1s and 2s | Dutch National Flag problem
Longest Consecutive Subsequence
k largest(or smallest) elements in an array
Find a triplet that sum to a given value
sort() in Python
Merge Sort for Linked Lists
Sort string of characters