您的位置:首页 > 编程语言 > Java开发

01排序的Java实现

2015-08-12 10:26 330 查看
比赛描述:

将01串首先按长度排序,长度相同时,按1的个数多少进行排序,1的个数相同时再按ASCII码值排序。


[b]输入:
[/b]

输入数据中含有一些01串,01串的长度不大于256个字符。


[b]输出:
[/b]

重新排列01串的顺序。使得串按基本描述的方式排序。


[b]样例输入:
[/b]

10011111
00001101
1010101
1
0
1100


[b]样例输出:
[/b]

0
1
1100
1010101
00001101
10011111


被AC的代码如下:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String[] str = new String[256];
int i=0;
while(sc.hasNextLine())
{
String inStr = sc.nextLine();
if(inStr.equals(""))
{
break;
}
str[i++]=inStr;
}
for(int j=0;j<i;j++)
{
for(int y=0;y<i-j-1;y++)
{
if(cmpStr(str[y],str[y+1])==1)
{
String temp = str[y+1];
str[y+1] = str[y];
str[y] = temp;
}
}
}
for(int j=0;j<i;j++)
{
System.out.println(str[j]);
}
}
private static int cmpStr(String s,String t)
{
if(s.length()<t.length())
{
return -1;
}
if(s.length()>t.length())
{
return 1;
}
if(s.length()==t.length())
{
if(NumOfOne(s)<NumOfOne(t))
{
return -1;
}else if(NumOfOne(s)>NumOfOne(t))
{
return 1;
}else
{
for(int m=0;m<s.length();m++)
{
if(s.charAt(m)>t.charAt(m))
{
return 1;
}else if(s.charAt(m)<t.charAt(m))
{
return -1;
}else
{
return 0;
}
}
}
}
return 0;
}
private static int NumOfOne(String s)
{
if(s==null||s.length()==0)
{
return 0;
}
int sum=0;
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)=='1')
{
sum++;
}
}
return sum;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java