在不使用 Java 中的内置排序方法的情况下对用户输入进行动态排序

Posted

技术标签:

【中文标题】在不使用 Java 中的内置排序方法的情况下对用户输入进行动态排序【英文标题】:Sorting user input dynamically without using inbuilt sorting methods in Java 【发布时间】:2016-11-14 00:27:04 【问题描述】:

我正在尝试对一些用空格分隔的用户输入的整数进行排序。

输入:4 2 1 5 9 -- 预期输出:1 2 4 5 9

用户在 i

 class javasort 
    public static void main(String[] args) 
    int num, i, j, temp;
    Scanner input = new Scanner(System.in);

    // System.out.println("Enter the number of integers to sort:");
    // num = input.nextInt();

    num = 5; // <-- the user input should be dynamic

    int array[] = new int[num];

    System.out.println("Enter integers: ");

    for (i = 0; i < num; i++)

        array[i] = Integer.parseInt(input.next());
        num = i; // make array as big as input ?

    for (i = 0; i < (num - 1); i++) 
        for (j = 0; j < num - i - 1; j++) 
            if (array[j] > array[j + 1]) 
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            
        
    

    System.out.println("Sorted list of integers:");

    for (i = 0; i < num; i++)
        System.out.println(array[i]);

【问题讨论】:

您缺少一对花括号。第一个循环的主体由一个且只有一个语句组成。建议:总是在 if 语句和循环体中使用花括号。 如果这是预期的循环,那么它是可疑的。如果num = i;,则i == num,所以i &lt; num 为假,循环将在一次迭代后结束。 num = i; 应该被删除。 num 是 5,您想从输入中读取 5 个数字。 如果您的意图是在每次“找到”一个新数字时更改数组的大小,那么仅仅更改 num 是无法实现的。 @RudyVelthuis 数组大小应该是动态的。我输入了 5,因为否则我无法让它工作 查看我之前的评论。这不是改变数组大小的方法。什么时候停止读取输入? 【参考方案1】:

您的代码几乎是正确的,然后您删除了您拥有的最佳提示。用Scanner.nextInt()点赞

num = input.nextInt();          // <-- get the count.
int array[] = new int[num];
System.out.println("Enter integers: ");
for (i = 0; i < num; i++)      // <-- don't rely on indentation for flow control.
    array[i] = input.nextInt(); // <-- get a number "num" times.

【讨论】:

我明白了。但我希望输入和输出是这样的 Input: 4 2 1 5 9 -- Expected output: 1 2 4 5 9 而不必在每个数字后按回车键。 第一个输入必须是您的数字计数。所以,5 4 2 1 5 9 应该这样做。 是的,我知道。但我正在寻找一个动态数组。用户不必指定需要输入的长度。此修复不适用于 5 4 或 55 77 11 Java 数组有固定长度,你可以使用Collection;或者您必须复制数组以添加新元素。此外,您将需要某种方式来指示输入已完成。您不使用内置方法的要求将使这非常变得困难。祝你好运!【参考方案2】:

如此简单,却如此高效:

Arrays.sort(array);

【讨论】:

我不能使用 Arrays.sort。这就是我不使用内置库的意思 猜猜看:Scanner、System 和 Integer 是内置库【参考方案3】:

您可以使用Bubble sort 算法。它在最坏的情况下运行 o(n^2)。不必把代码放在这里,你可以做到。它只需要不到 20 行。

【讨论】:

以上是关于在不使用 Java 中的内置排序方法的情况下对用户输入进行动态排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用Assembler循环的情况下对3个变量进行排序?

如何在不使用任何内置高斯函数的情况下对图像进行高斯模糊?

pd.dataframe - 在不更改索引的情况下对列表列中的每个列表进行排序

如何在不改变原始数组的情况下对数组进行排序?

在不更改原始 RowState 的情况下对数据集中的数据表进行排序

如何在不消除坐标的情况下对浮点坐标进行排序? [关闭]