【问题标题】:Bubble Sort (2 for loops vs 1) + Int Array to String Array?冒泡排序(2 for loop vs 1)+ Int Array to String Array?
【发布时间】:2014-02-17 23:07:40
【问题描述】:

我有一个 Java 课程的家庭作业,需要一些帮助。我在作业中实施了冒泡排序。它工作得很好,但是我写了一个带有一个 for 循环的版本,但是,一个 for 循环版本不起作用。有谁知道为什么?这只是为了踢球和咯咯笑,不是任务所必需的。

我的第二个问题是如何将一个 int 数组(用随机函数的强制转换整数填充)转换为一个字符串数组。我知道一个解决方案涉及“数组”库,但我不记得在课堂上学习过它,而是宁愿将它用作最后的手段。有什么想法吗?

如果你们有兴趣,这里是代码:

import static java.lang.Math.random;

public class Main
{
    public static void main(String[] args)
    {
        int intarray[] = new int[50];
        String stringarray[] = new String[50];

        for (int i = 0; i < intarray.length; i++)
        {
            intarray[i] = (int)(1000 * random());
        }

        for (int i = 0; i < intarray.length; i++)
        {
             System.out.print(intarray[i] + " ");
        }

        BubbleSort2(intarray);
        System.out.println();


        for (int i = 0; i < intarray.length; i++)
        {
            System.out.print(intarray[i] + " ");
        }

    }

    public static void BubbleSort(int array[])
    {
        for (int i = 0; i < array.length; i++)
        {
            for (int j = 0; j < array.length - 1; j++)
            {
                if (array[j] > array[i])
                {
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
    }

    public static void BubbleSort2(int array[])
    {
        for (int i = 1; i < array.length; i++)
        {
            if (array[(i - 1)] > array[i])
            {
                int temp = array[(i - 1)];
                array[(i - 1)] = array[i];
                array[i] = temp;
            }
        }
    }
}

【问题讨论】:

    标签: java arrays string sorting


    【解决方案1】:

    冒泡排序的最坏情况是 O(n^2)。

    每次循环遍历列表时,都会将最大元素移动到数组中的正确位置(末尾)。在最坏的情况下,您必须对列表中的每个元素执行此操作,这就是您有外循环的原因。从而确保您将每个元素移动到正确的位置。

    BubbleSort2 中,您实际上只是将最大元素移动到正确的位置,因为您将一个位置一个位置地搬运到最后。

    至于你的第二个问题,一个非常简单的方法是首先创建一个相同大小的String[]

    String[] stringArray = new String[intarray.length];
    

    然后,我们可以用您的 int 数组的内容填充这个数组。我们可以通过循环访问您的 int[] 来做到这一点。

    for(int i = 0; i < intArray.length; i++) {
        stringArray[i] = intArray[i] + "";
    }
    

    这只是遍历int[] 中的每个整数,然后将它们转换为字符串,并将它们存储在String[] 中。

    【讨论】:

    • 非常感谢您的帮助!!我不明白为什么冒泡排序没有完全工作!至于字符串数组,也非常感谢!我假设字符串数组的每个元素都是 int 数组中的一个整数(整数)? (例如:int[0] 中的 500 将是 string[0] 中的 500)
    • 是的,没错。它只是把数字变成一个字符串,所以500变成"500"
    • 另外,很高兴我能帮上忙!不要忘记接受答案!
    【解决方案2】:

    您只从头到尾遍历数组一次,因此只有最大元素会被正确排序。为了对其他元素进行排序,冒泡排序需要外循环。

    int 转换为String 的最简单方法是将其与一个空的“字符串”连接起来,如下所示:

    String str = i + ""
    

    【讨论】:

    • 也感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多