首页 > 试题广场 >

大整数排序

[编程题]大整数排序
  • 热度指数:18162 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
对N个长度最长可达到1000的数进行排序。

输入描述:
输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。


输出描述:
可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
示例1

输入

3
11111111111111111111111111111
2222222222222222222222222222222222
33333333

输出

33333333
11111111111111111111111111111
2222222222222222222222222222222222

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner read = new Scanner(System.in);
        while(read.hasNext()) {
        int num = read.nextInt();
        LinkedList<char[]> list = new LinkedList<char[]>();
        
        for(int i=0;i<num;i++) {
            list.add(read.next().toCharArray());
        }
        
        Collections.sort(list,new Comparator<char[]>()
        {
            public int compare(char[] o1,char[] o2)
            {
                if(o1.length>o2.length) {
                    return 1;
                }
                else if(o1.length<o2.length){
                    return -1;
                }
                else {
                    for(int i=0;i<o1.length;i++) {
                        if((int)(o1[i])<(int)(o2[i]))
                            return -1;
                        else if((int)(o1[i])>(int)(o2[i]))
                            return 1;
                        else
                            continue;
                    }
                }
                return 1;
            }
        });
        
        for(int i=0;i<list.size();i++) {
            System.out.println(list.get(i));
        }
//        System.out.println(list);
    }
}
}
发表于 2020-08-05 23:22:06 回复(0)
快排思路下的大整数排序

import java.util.*; public class Main {         public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         while(sc.hasNext()) {             int n = sc.nextInt();             sc.nextLine();             String[] str = new String[n];             for(int i = 0; i < str.length; i++) {                 str[i] = sc.nextLine();             }             quickSort(str,0,str.length-1);             for(String s : str) {                 System.out.println(s);             }         }     }     private static void quickSort(String[] str, int left, int right) {         if(left > right) {             return;         }         int i = left,j = right;         String tmp = str[left];         while (i != j) {             while (i < j && !find(tmp,str[j],0)) {                 j--;             }             while (i < j && find(tmp,str[i],1)) {                 i++;             }             if(i < j) {                 String tmep = str[i];                 str[i] = str[j];                 str[j] = tmep;             }         }         str[left] = str[i];         str[i] = tmp;         quickSort(str,left,i-1);         quickSort(str,i+1,right);     }     private static boolean find(String tmp, String s,int flag) {         if(tmp.length() > s.length()) {             return true;         }else if(tmp.length() == s.length()) {             if(tmp.equals(s)) {                 if(flag == 0) {                     return false;                 } else {                     return true;                 }             }             for (int i = 0; i < tmp.length(); i++) {                 if(tmp.charAt(i) > s.charAt(i)) {                     return true;                 }                 if(tmp.charAt(i) < s.charAt(i)) {                     return false;                 }             }         }         return false;     } }


发表于 2020-04-04 16:42:50 回复(0)
Java 解法
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<BigInteger> list = new ArrayList<>();
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) list.add(new BigInteger(scanner.next()));
        Collections.sort(list);
        for (BigInteger i : list) System.out.println(i);
    }
}


发表于 2020-03-18 13:22:39 回复(0)
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            List<BigInteger> list = new ArrayList<>();
            int n = scanner.nextInt();
            for (int i = 0; i < n; i++) {
                BigInteger num = scanner.nextBigInteger();
                list.add(num);
            }
            Collections.sort(list);
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
        }
    }
}

发表于 2019-12-09 17:48:28 回复(0)
import java.io.*;

public class Main{
    //大数字不好比较所以当成字符串处理
    private static int compare(String a,String b) {
        if (a.length()>b.length()) {
            return 1;
        }else if (a.length()<b.length()) {
            return -1;
        }else {
            return a.compareTo(b);
        }
        
    }
    //快速排序
    private static void sort(String[] data,int l,int r) {
        if (l<r) {
            int i = l;
            int j = r;
            String x = data[i];
            while(i<j) {
                while(i<j&&compare(data[j], x)>=0) {
                    j--;
                }
                if (i<j) {
                    data[i++] = data[j];
                }
                while(i<j&&compare(data[i], x)<0) {
                    i++;
                }
                if (i<j) {
                    data[j--] = data[i];
                }
            }
            data[i]= x;
            sort(data, l, i-1);
            sort(data, i+1, r);
        }
    }
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        String[] data = new String[n];
        for (int i = 0; i < n; i++) {
            data[i]= reader.readLine(); 
            
        }
        sort(data, 0,n-1);
        for (String string : data) {
            System.out.println(string);
        }
        
        
    }
}
 
发表于 2019-01-18 21:13:00 回复(0)
import java.util.Scanner;

public class Main {

@SuppressWarnings("resource")
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
String[] stringArray = new String[N];
for (int i = 0; i < N; i++) {
stringArray[i] = scanner.next();
}
for (int i = 0; i < stringArray.length - 1; i++) {
for (int j = i + 1; j < stringArray.length; j++) {
if ((stringArray[i].length() < stringArray[j].length())
|| (stringArray[i].length() == stringArray[j].length())) {
if (stringArray[i].length() == stringArray[j].length()) {
Integer valueOfi = Integer.valueOf(stringArray[i]);
Integer valueOfj = Integer.valueOf(stringArray[j]);
if (valueOfi > valueOfj) {
int t = valueOfi;
valueOfi = valueOfj;
valueOfj = t;
}
} else {
String t = stringArray[i];
stringArray[i] = stringArray[j];
stringArray[j] = t;
}
}
}
}
for (int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[stringArray.length - 1 - i]);
}
}

}

发表于 2017-06-18 18:23:33 回复(0)
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
int n ;
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext())
{
n=scanner.nextInt();
ArrayList<BigInteger> arr=new ArrayList<BigInteger>();
while(n>=1 && n<=100)
{
while(n>0)
{
BigInteger n1=scanner.nextBigInteger();
if((n1+" ").length()<=1001 &&  (n1+" ").length()>=2 && !(n1+" ").startsWith("0"))
{
arr.add(n1);
}
n--;
}
}

Collections.sort(arr);
for(int i=0;i<arr.size();i++)
{
System.out.println(arr.get(i));
}
}
}

}

发表于 2017-05-30 16:17:53 回复(0)
import java.util.*;

public class Main{

	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int count = 0;
		Data[] ds = null;
		while(sc.hasNext()){
			count = sc.nextInt();
			ds = new Data[count];
			sc.nextLine();
			for (int i=0;i<count;i++) {
				ds[i] = new Data(sc.nextLine());
			}
			sort(ds);
			for (int i=0;i<ds.length;i++) {
				System.out.println(ds[i].getVal());
			}
		}
	}
	/* 比较喜欢用选择排序... */
	public static void sort(Data[] ds){
		for (int i=0;i<ds.length;i++) {
			int min = i;
			for (int j=i+1;j<ds.length;j++) {
				if(ds[min].compareTo(ds[j]) > 0){
					min = j;
				}
			}
			if(min != i){
				Data temp = ds[min];
				ds[min] = ds[i];
				ds[i] = temp;
			}
		}
	}
	
	static class Data implements Comparable<Data>{
		private int num;
		private String val;
		public Data(String val){
			this.val = val;
			this.num = val.length();
		}
		public int compareTo(Data d){
			int result = this.num - d.num;
			if(result == 0){
				result = this.val.compareTo(d.val);
			}
			return result;
		}
		public int getNum(){
			return this.num;
		}
		public String getVal(){
			return this.val;
		}
	}
}

发表于 2017-04-01 22:56:03 回复(0)