簡體   English   中英

從一個數組排序到另一個數組,Java

[英]Sorting from one array into another, Java

我的目標是將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]);
        }
    }
}

我現在沒有我的電腦,但我認為問題是,一旦您第一次將變量設置為2最小,它將永遠保持2,並且沒有其他較小的數字。 因此,我認為您只需執行一次就可以執行內部操作,並且值始終為2。

編輯。 我認為,將最小的inizialization移到拳頭下面應該行得通。

當此條件不成立時,您沒有執行任何操作。

if (ar[n] < smallest)

因此,只有最小的元素可以通過此檢查,然后繼續使用新數組。

您也可以像這樣以更好的形狀對數組進行排序

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

Collections.sort(ar):

似乎您想使用稱為“選擇排序”的算法進行排序,但是您的代碼實現不佳。

您可以從兄弟的問題中學習並檢查以下答案: 選擇排序示例

糟糕,您的循環中存在一個問題,該問題會將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;            
    }

順便說一句,以更簡單的方式進行排序的副本:

復印副本:

int[] sorted = ar.clone();

然后,使用Java Util對它進行排序:

Arrays.sort(sorted);

僅2行就可以得到您想要的。

那這樣的東西呢?

簡短而甜美:

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]

我只是不明白,為什么我們需要這樣做,比如排序到另一個數組中。 您可以使用Arrays.sort()方法在數組中排序,或者如果要在其他數組中排序,則可以執行以下步驟:

  1. 將陣列復制到新陣列。

  2. 排序新數組,然后排序。

如果您仍想繼續執行,那么我已經重構了您的代碼。 現在,您的代碼可以正常工作,看起來像:

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]);
        }
    }

}

您的錯誤是您沒有重新分配“最小”變量。 由於它指向數組的最小元素,因此在下次運行時不會更新,因為數組中的任何元素都不小於此變量。 希望你能明白。 如有任何疑問,請詢問。

因為每次您粉碎舊的價值(大價值)時,您都不會保存它以進行轉移
最小= ar [n]; 最小索引= 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]);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM