/*
思路:使用快排,比较字符串拼接的数字大小
给定两个数字m和n,寻找一种排序方法
如果凭借成的数字mn<nm,则将m排序在n的前面
反之,将n排在前面
*/
class Solution {
public String minNumber(int[] nums) {
String[] st = new String[nums.length];
for(int i = 0;i < nums.length;i++) {
st[i] = String.valueOf(nums[i]);
}
qsort(st,0,nums.length-1);
StringBuilder sb = new StringBuilder();
for(int i = 0;i < nums.length;i++) {
sb.append(st[i]);
}
return sb.toString();
}
public static void qsort(String[] st, int l, int h) {
if(l > h) return;//记得递归返回条件
int i = l,j = h,k = l;
while(i < j) {
while(i < j && (st[j]+st[k]).compareTo(st[k]+st[j]) >= 0)//先写j
j--;
while(i < j && (st[i]+st[k]).compareTo(st[k]+st[i]) <= 0)
i++;
String s = st[i];//直接交换ij,因为此时i一定小于j
st[i] = st[j];
st[j] = s;
}
String t = st[k];
st[k] = st[i];
st[i] = t;
qsort(st,l,i-1);//i表示中间的位置,k表示起始位置
qsort(st,i+1,h);
}
}