Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Arrays;
- public class Sort {
- private static int[] decimalToDigits(int decimal) {
- String temp = Integer.toString(decimal);
- int[] digits = new int[temp.length()];
- for (int i = 0; i < temp.length(); i++)
- {
- digits[i] = temp.charAt(i) - '0';
- }
- return digits;
- }
- private static int compareNumbers(Object o1, Object o2) {
- int i1 = (int) o1;
- int i2 = (int) o2;
- if (i1 == i2) return 0;
- int[] digits1 = decimalToDigits(i1);
- int[] digits2 = decimalToDigits(i2);
- int i;
- for (i = 0; i < digits1.length && i < digits2.length; i++) {
- if (digits1[i] == digits2[i]) {
- continue;
- }
- return digits2[i] - digits1[i];
- }
- // getting here means both numbers have the same prefix MSBs
- // need to compare first digit of smaller number with next
- // digit from larger:
- int[] larger = i1 > i2 ? digits1 : digits2;
- int[] smaller = i1 > i2 ? digits2 : digits1;
- for (int j = 0; i < larger.length && j < smaller.length; i++, j++) {
- if (larger[i] == smaller[j]) {
- continue;
- }
- return larger == digits2 ? larger[i] - smaller[j] : smaller[j] - larger[i];
- }
- // this is a case like i1 = 123, i2 = 123123. In this case,
- // both numbers can be placed first:
- return 0;
- }
- public static void main(String[] args) {
- Object[] arr = { 3, 34, 30 ,9 ,120, 345 , 345346 };
- System.out.print("Largest concatenation of numbers is: ");
- Arrays.stream(arr)
- .sorted(Sort::compareNumbers)
- .forEach(System.out::print);
- System.out.println();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement