package Jianzhi;
import java.util.Arrays;
import java.util.Comparator;
/*
* 先将整型数组换成String数组排序,
* java使用自定义的排序方法需要实现java.util.Comparator接口中的compare方法
* 最后将排好序的字符串拼接出来,比较拼接之后的字符串。
* 若ab > ba 则 a > b,
* 若ab < ba 则 a < b,
* 若ab = ba 则 a = b;
*/
public class jianzhi_45 {
public String PrintMinNumber(int[] numbers) {
if(numbers==null||numbers.length==0) return "";
int len=numbers.length;
String[] str=new String[len];//转化为字符串数组,之后定义字符串的比较方法
StringBuilder res=new StringBuilder();
for(int i=0;i<len;i++) {
str[i]=String.valueOf(numbers[i]);//String.valueOf()//将其他类型转化为字符串类型
}
Arrays.sort(str,new Comparator<String>() {//Arrays.sort(),Comparator()用于用户自定义自己的比较函数
public int compare(String s1,String s2) {
String c1=s1+s2;
String c2=s2+s1;
return c1.compareTo(c2);
}
});
for(int i=0;i<len;i++) {
res.append(str[i]);
}
return res.toString();
}
}
/*
* 采用选择排序的方法,每次按照自定义的排序方法,
* 选择最小的值添加到StringBuilder中.
* String中的默认compareTo()方法是按照字典序(ASCII)的顺序进行排序,完全通过字母的顺序进行排序
*/
class Solution{
public String PrintMinNumber(int[] numbers) {
if(numbers==null||numbers.length<0) return "";
StringBuilder res=new StringBuilder();
String pre,last;
int tmp;
for(int i=0;i<numbers.length;i++) {
for(int j=i;j<numbers.length;j++) {
pre=numbers[i]+""+numbers[j];//字符串拼接
last=numbers[j]+""+numbers[i];
if(pre.compareTo(last)>0) {//如果拼接之后的pre大于last,那么交换他们的次序,每次外循环都能将最小的数移到最外面
tmp=numbers[i];
numbers[i]=numbers[j];
numbers[j]=tmp;
}
}
res.append(numbers[i]);
}
return res.toString();
}
}
Comparator 是一个接口,所以sort方法中可以传入任意实现了此接口的类的实例,这就是策略模式的主要思想.
参考:http://blog.csdn.net/wisgood/article/details/16541013(深入理解Arrays.sort())
http://blog.csdn.net/winddreams/article/details/51577500(Arrays.sort()总结)