从一个数组排序到另一个数组,Java

时间:2017-08-29 02:29:29

标签: java arrays sorting

我的目标是将ar []数组中的元素移动到sorted []数组中,并将它们从最小到最大排序。虽然因为我的循环应该找到数组中的最小元素然后用大数字替换元素,但我遇到了这个部分的问题。我想我的大部分代码都已关闭,但是当我运行程序时,sorted []数组中的每个元素都是2.我在这里做错了什么?

public class Lab1
{
    public static void main(String argv[])
    {
        int ar[]     = { 7, 5, 2, 8, 4, 9, 6 };
        int sorted[] = new int[ar.length];
        int smallest = ar[0];
        int smallestindex = 0;

        for (int i=0; i<ar.length; i++)
        {
            for (int n=0; n<ar.length; n++)
            {
                if (ar[n] < smallest)
                {
                    smallest = ar[n];
                    smallestindex = n;
                }
            }

            sorted[i] = smallest;
            ar[i] = 1000000;
        }

        // print sorted array:
        for (int i=0; i<sorted.length; i++)
        {
            System.out.println("sorted[" + i + "] = " + sorted[i]);
        }
    }
}

7 个答案:

答案 0 :(得分:0)

我现在没有自己的电脑,但我认为问题在于,一旦你将变量设置为最小值为2,它将永远保持为2,并且没有其他数字更小。所以我认为你只执行一次内部,而值总是2。

编辑。我认为将最小的inizialization移到拳头之下应该可行。

答案 1 :(得分:0)

当这种情况不成立时,你没有采取任何行动。

if (ar[n] < smallest)

因此,只有最小的元素才能通过此检查并继续使用新数组。

此外,您可以像这样更好地对数组进行排序

List<Integer> ar = Arrays.as list ( *your numbers here*);

Collections.sort(ar):

答案 2 :(得分:0)

您似乎希望使用名为&#39; Selection Sort&#39;的算法进行排序,但您的代码实现效果不佳。

您可以从这个兄弟的问题中学习,并查看下面的答案: Selection Sort Example

答案 3 :(得分:0)

哎呀,你的循环里面有问题, 将ar []中最小的复制到sorted [],即2, 所以你在sorted []中的每个元素中得到2。

for (int i=0; i<ar.length; i++)
    {
        for (int n=0; n<ar.length; n++)
        {
            if (ar[n] < smallest)
            {
                smallest = ar[n]; <----YOU ALWAYS GET 2 HERE
                smallestindex = n;
            }
        }

        sorted[i] = smallest; <---- AND SET 2 TO YOUR sorted[] HERE
        ar[i] = 1000000;
    }

我不知道你是想要一个解决方案还是自己解决,因为你的问题是在问什么是错的,但这里是

for (int i=0; i<ar.length; i++)
    {
        for (int n=0; n<ar.length; n++)
        {
            if (ar[n] < smallest)
            {
                smallest = ar[n];
                smallestindex = n;
                ar[n] = 1000000; <----CHANGE THE SMALLEST ITEM HERE RATHER THAN OUTSIDE
            }
        }

        sorted[i] = smallest;            
    }

btw,以更简单的方式制作排序副本:

Firsy制作副本:

int[] sorted = ar.clone();

然后,使用Java Util对其进行排序:

Arrays.sort(sorted);

只需2行即可获得所需内容。

答案 4 :(得分:0)

这样的事情怎么样?

短而甜蜜:

import java.util.Arrays;

public class Lab1
{
    public static void main(String argv[])
    {
        int ar[]     = { 7, 5, 2, 8, 4, 9, 6 };
        int sorted[] = ar.clone();
        Arrays.sort(sorted);

        System.out.println("Original array: " + Arrays.toString(ar));
        System.out.println("Sorted array: " + Arrays.toString(sorted));
    }
}

输出:

Original array: [7, 5, 2, 8, 4, 9, 6]
Sorted array: [2, 4, 5, 6, 7, 8, 9]

答案 5 :(得分:0)

我无法理解,为什么我们需要这个,就像排序到另一个数组一样。您可以使用Arrays.sort()方法在数组中进行排序,或者如果要在不同的数组中进行排序,可以执行以下步骤:

  1. 将数组复制到新数组。

  2. 对新数组进行排序,然后排序。

  3. 如果您仍想继续实施,那么我已经重构了您的代码。现在您的代码工作正常,看起来像:

    public class Prog1 {
        public static void main(String[] args) {
            int ar[] = { 7, 5, 2, 8, 4, 9, 6 };
            int sorted[] = new int[ar.length];
            int smallest = ar[0];
            int smallestindex = 0;
    
            for (int i = 0; i < ar.length; i++) {
                for (int n = 0; n < ar.length; n++) {
                    if (ar[n] < smallest) {
                        smallest = ar[n];
                        smallestindex = n;
                    }
                }
    
                sorted[i] = smallest;
                //Your mistake was here.
                ar[smallestindex] = 1000000;
                smallest=ar[0];
                smallestindex=0;
            }
    
            // print sorted array:
            for (int i = 0; i < sorted.length; i++) {
                System.out.println("sorted[" + i + "] = " + sorted[i]);
            }
        }
    
    }
    

    你的错误在于你没有重新分配最小的&#39;变量。因为它指向数组的最小元素所以它不会在下次运行时更新,因为数组中的元素不会小于此变量。希望你明白。如有任何问题,您还有,请询问。

答案 6 :(得分:0)

因为每次你粉碎旧价值(大价值)而你都不会为了转移而保存它 最小= ar [n]; smallestindex = n; 您需要添加另一个变量来更改单元格之间的值,或者使用arraylist以便于使用。

    int ar[] = {7, 5, 2, 8, 4, 9, 6};
    int sorted[] = new int[ar.length];
    int smallest = ar[0];
    for (int i = 0; i < ar.length ; i++) {

        for (int j = i + 1; j < ar.length; j++) {

            if (ar[i] > ar[j]) {

                smallest = ar[j]; //save small value
                ar[j] = ar[i];//transaction between two comparables cells
                ar[i] = smallest;//set small value as first

            }
            sorted[i]=ar[i]; //set first small value
        }

    }

    // print sorted array:
    for (int i = 0; i < sorted.length; i++) {
        System.out.println("sorted[" + i + "] = " + sorted[i]);
    }