我正在尝试按升序对任意长度的整数进行排序,而不使用字符串,数组或递归。
例:
Input: 451467
Output: 144567
我已经弄清楚了如何用模数除法获得整数的每个数字:
int number = 4214;
while (number > 0) {
IO.println(number % 10);
number = number / 10;
}
但是我不知道如何在没有数组的情况下排序数字。
不用担心IO
上课;这是我们教授给我们的习俗课。
实际上有一个非常简单的算法,它仅使用整数:
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);
它会打印出来1123447
。这个想法很简单:
该版本的算法可以按升序将两个asc排序,您只需要更改条件即可。
另外,我建议您看一下所谓的Radix Sort,这里的解决方案从基数排序中吸取一些想法,我认为基数排序是该解决方案的一般情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句