牛客網---大整數排序

想看代碼直接點擊此處!
對N個長度最長可達到1000的數進行排序。
輸入描述:

輸入第一行爲一個整數N,(1<=N<=100)。
接下來的N行每行有一個數,數的長度範圍爲1<=len<=1000。
每個數都是一個正數,並且保證不包含前綴零。

輸出描述:

可能有多組測試數據,對於每組數據,將給出的N個數從小到大進行排序,輸出排序後的結果,每個數佔一行。

輸入:

3
11111111111111111111111111111
2222222222222222222222222222222222
33333333

輸出:

33333333
11111111111111111111111111111
2222222222222222222222222222222222

題目分析:
將每個大數當作字符串進行儲存,然後再對字符串數組進行排序
排序的方法:

  1. 長度越長的字符串所代表的數值越大
  2. 長度相同的字符串再從最高字符位到最低字符位逐字符比較,兩個數字的大小關係與第一個不相同的字符位的大小關係相同,如果每個字符位的數值都相同,則兩個數相同。

代碼

import java.util.Scanner;

public class LargeNumberSort {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()){
            int n = sc.nextInt();
            String[] largeNum = new String[n];
            // 輸入
            for(int i = 0; i < n; i++){
                largeNum[i] = sc.next();
            }
            // 排序
            quickSort(largeNum, 0, n-1);
            // 輸出
            for(int i = 0; i < n; i++){
                System.out.println(largeNum[i]);
            }
        }
    }
    // 這裏採用的是挖坑法
    private static void quickSort(String[] data, int l, int h){
        if(l < h){
            int i = l;
            int j = h;
            String key = data[i];
            while(i < j){
                while(i < j && compare(key, data[j]) < 0){
                    j--;
                }
                if(i < j){
                    data[i++] = data[j];
                }
                while(i < j && compare(key, data[i]) >= 0){
                    i++;
                }
                if(i < j){
                    data[j--] = data[i];
                }
            }
            data[i] = key;
            quickSort(data, l, i-1);
            quickSort(data, i+1, h);
        }
    }

    private static int compare(String key, String datum) {
        // 長度越長的字符串所代表的數值越大
        if(key.length() > datum.length()){
            return 1;
        } else if(key.length() < datum.length()){
            return -1;
        } else{
            // 長度相同的字符串再從最高字符位到最低字符位逐字符比較
            return key.compareTo(datum);
        }
    }
}

本地IDEA運行結果:
在這裏插入圖片描述
牛客網在線OJ運行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章