import
java.util.Arrays;
public
class
SmallestNumber {
public
static
boolean
compare(String a, String b) {
return
(a + b).compareTo(b + a) <
0
;
}
public
static
int
partition(String[] arr,
int
low,
int
high) {
String pivot = arr[high];
int
i = low -
1
;
for
(
int
j = low; j <= high -
1
; j++) {
if
(compare(arr[j], pivot)) {
i++;
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
String temp = arr[i +
1
];
arr[i +
1
] = arr[high];
arr[high] = temp;
return
i +
1
;
}
public
static
void
quicksort(String[] arr,
int
low,
int
high) {
if
(low < high) {
int
pi = partition(arr, low, high);
quicksort(arr, low, pi -
1
);
quicksort(arr, pi +
1
, high);
}
}
public
static
String smallestNumber(
int
[] nums) {
String[] numStrs =
new
String[nums.length];
for
(
int
i =
0
; i < nums.length; i++) {
numStrs[i] = String.valueOf(nums[i]);
}
quicksort(numStrs,
0
, numStrs.length -
1
);
StringBuilder result =
new
StringBuilder();
for
(String numStr : numStrs) {
result.append(numStr);
}
return
result.toString();
}
public
static
void
main(String[] args) {
int
[] nums = {
5
,
6
,
2
,
9
,
21
,
1
};
System.out.println(smallestNumber(nums));
}
}