kla*_*veR 9 java sorting modulo
我试图按升序排序任何长度的整数的数字,而不使用字符串,数组或递归.
例:
Input: 451467
Output: 144567
Run Code Online (Sandbox Code Playgroud)
我已经弄清楚如何用模数除法得到整数的每个数字:
int number = 4214;
while (number > 0) {
IO.println(number % 10);
number = number / 10;
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在没有数组的情况下订购数字.
不要担心IO上课; 这是我们教授给我们的定制课程.
这是4行,基于forwhile循环的循环变体,带有一点java 8 spice:
int number = 4214;
List<Integer> numbers = new LinkedList<>(); // a LinkedList is not backed by an array
for (int i = number; i > 0; i /= 10)
numbers.add(i % 10);
numbers.stream().sorted().forEach(System.out::println); // or for you forEach(IO::println)
Run Code Online (Sandbox Code Playgroud)
实际上有一个非常简单的算法,它只使用整数:
int number = 4214173;
int sorted = 0;
int digits = 10;
int sortedDigits = 1;
boolean first = true;
while (number > 0) {
int digit = number % 10;
if (!first) {
int tmp = sorted;
int toDivide = 1;
for (int i = 0; i < sortedDigits; i++) {
int tmpDigit = tmp % 10;
if (digit >= tmpDigit) {
sorted = sorted/toDivide*toDivide*10 + digit*toDivide + sorted % toDivide;
break;
} else if (i == sortedDigits-1) {
sorted = digit * digits + sorted;
}
tmp /= 10;
toDivide *= 10;
}
digits *= 10;
sortedDigits += 1;
} else {
sorted = digit;
}
first = false;
number = number / 10;
}
System.out.println(sorted);
Run Code Online (Sandbox Code Playgroud)
它会打印出来1123447.这个想法很简单:
该版本的算法可以在asc命令中进行排序,您只需要更改条件.
另外,我建议你看一下所谓的Radix Sort,这里的解决方案从基数排序中得到一些想法,我认为基数排序是该解决方案的一般情况.
| 归档时间: |
|
| 查看次数: |
33219 次 |
| 最近记录: |