📜  对大量数字进行排序

📅  最后修改于: 2021-04-23 19:15:38             🧑  作者: Mango

给定一个数字数组,其中每个数字都表示为字符串。这些数字可能非常大(可能不适合int long int int),任务是对这些数字进行排序。

例子:

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

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

以下是上述想法的实现。

C++
// C++ program to sort large numbers represented
// as strings.
#include
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 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


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 contibuted by PrinciRaj1992


输出:

5 12 97987 1237637463746732323 

时间复杂度: O(k * n Log n),其中k是最长数字的长度。这里假设sort()函数使用O(n Log n)排序算法。

类似帖子:
排序大整数