当前位置: 首页 > 面试题库 >

如何在不使用字符串或数组的情况下按升序对整数进行排序?

干浩阔
2023-03-14
问题内容

我正在尝试按升序对任意长度整数的数字进行排序,而不使用字符串,数组或递归

例:

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。这个想法很简单:

  1. 您将要排序的数字作为当前数字(我们称其为N)
  2. 您可以浏览已排序数字中的所有数字(我们称其为S)
  3. 如果S中的当前数字小于N中的当前数字,则只需将数字插入S中的当前位置。否则,只需转到S中的下一个数字。

该版本的算法可以按升序将两个asc排序,您只需要更改条件即可。

另外,我建议您看一下所谓的Radix
Sort
,这里的解决方案从基数排序中获取一些想法,我认为基数排序是该解决方案的一般情况。



 类似资料:
  • 问题内容: 我有一个包含多个数组的数组,我想根据这些数组中的某个字符串对数组进行排序。 如何按名称排序,以便 阿尔伯特排 在首位, 齐默尔曼排 在最后? 我知道如果可以使用整数进行排序,但是字符串使我毫无头绪,该怎么办。 谢谢您帮忙!:) 问题答案: 这可以通过将支持函数作为参数传递给方法调用来实现。 像这样:

  • 问题内容: 我创建了一个sqlite数据库,该数据库具有一个存储温度值的表。第一次将温度值以升序写入数据库。然后,我将数据库中的温度值读取到一个列表中,然后将该列表添加到组合框中以选择温度- 效果很好。 结果列表为: 然后,我向数据库添加一个新的温度值,例如“ 33”。 它被附加到表的末尾。如果我现在阅读温度,列表将变为: 如果我做或,最终的结果是 有什么简单的方法可以按升序对列表进行排序,以便得

  • 问题内容: 我正在尝试使用来根据字符串的长度对字符串数组进行排序,但这会按字典顺序而不是按长度对字符串进行排序。这是我的代码: 排序后: 但是我想要的是 如何获得上述输出?请给出JDK 1.7和JDK1.8的答案。 问题答案: 如果您使用的是 JDK 1.8或更高版本,则可以使用 lambda表达式( 如 matt 答案)。但是,如果您使用的是 JDK 1.7或更早版本,请尝试编写一个 自定义Co

  • 我试图计算每个字符串中的元音,我想根据count变量交换字符串,但我做不到。在接受字符串后,我用toCharArray()函数将其转换为char数组,并将每个字符与小写和大写元音进行比较。 我收到一个错误。编写代码部分的任何帮助都将不胜感激。 输入: 输出:

  • 问题内容: 我一直在寻找一种不用使用collections.sort就可以对数组列表进行排序的方法,因为我自己的逻辑有缺陷,而且我遇到了很多麻烦。 我需要对它进行排序,以便可以使用我创建的一种方法,该方法基本上可以执行collections.swap的工作,以便对数组列表进行完全排序。 这是我的代码: 我对此一直很烦恼。抱歉,这是在伤害社区。 问题答案: 我想,你希望下面的算法:在阵列的其余部分发

  • 问题内容: 我有这样的txt文件中的数据列表 我的任务是按照每个标准对这些数据进行排序,例如)按日期,纬度和经度排序 我尝试像这样的泡沫排序 这可行,但是需要太多时间 那里有在txt文件数据 有没有其他方法可以对这些数据进行排序? 问题答案: 我可能会破坏一些学生的家庭作业,但是这里… 正如课题所建议的那样,Java的自然方法是创建一个表示您的数据的类。然后实现一个将传递给实用方法的方法。 在运行