1.如果 x+y > y+x 那么 x 大于 y
2.字典序 compareTo “6” > “1”
这个快排模板更简单些
不要忘了 if(l>=r) return;
从右找到第一个比pivot小的 从左找到第一个比pivot大的 交换
最后的 temp 是 number[i]
import java.util.ArrayList;
public class Solution {
public String PrintMinNumber(int [] numbers) {
String[] strs = new String[numbers.length];
for(int i = 0; i < numbers.length; i++)
strs[i] = String.valueOf(numbers[i]);
quicksort(strs, 0, strs.length - 1);
StringBuilder res = new StringBuilder();
for(String s : strs)
res.append(s);
return res.toString();
}
public void quicksort(String [] numbers, int l, int r){
if(l >= r) return;
int i = l;
int j = r;
// 第一个作为pivot
String temp = numbers[l];
while(i<j){
while(i<j && (numbers[j] + numbers[l]).compareTo(numbers[l] + numbers[j]) >=0) j--;
while(i<j && (numbers[l] + numbers[i]).compareTo(numbers[i] + numbers[l]) >=0) i++;
temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
numbers[i] = numbers[l];
numbers[l] = temp;
quicksort(numbers,l,i-1);
quicksort(numbers,i+1,r);
}
}


京公网安备 11010502036488号