实际上有一个非常简单的算法,它 仅 使用 整数 :
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。这个想法很简单:
- 您将要排序的数字作为当前数字(我们称其为N)
- 您可以浏览已排序数字中的所有数字(我们称其为S)
- 如果S中的当前数字小于N中的当前数字,则只需将数字插入S中的当前位置。否则,只需转到S中的下一个数字。
该版本的算法可以按升序将两个asc排序,您只需要更改条件即可。
另外,我建议您看一下所谓的Radix
Sort,这里的解决方案从基数排序中获取一些想法,我认为基数排序是该解决方案的一般情况。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)