[英]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()方法在數組中排序,或者如果要在其他數組中排序,則可以執行以下步驟:
將陣列復制到新陣列。
排序新數組,然后排序。
如果您仍想繼續執行,那么我已經重構了您的代碼。 現在,您的代碼可以正常工作,看起來像:
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.