我正在學習如何使用陣列,我正在嘗試使用兩個 ArrayList<Integer> 手動對整數陣列進行排序。
這是我目前擁有的:
public Object[] arraySort (int[] importedArray) {
// !!! This method returns the original imported method (?). !!!
ArrayList<Integer> unsorted = new ArrayList<>();
ArrayList<Integer> sorted = new ArrayList<>();
// Convert importedArray into unsorted Integer ArrayList
for (int i = 0; i < importedArray.length; i ) {
unsorted.add(importedArray[i]);
}
// Find minimum value of unsorted ArrayList, add to sorted ArrayList, and remove min value from unsorted
for (int i = 0; i < unsorted.size(); i ) {
int min = Integer.MAX_VALUE;
int index = 0;
for (int j = 0; j < unsorted.size(); j ) {
if (unsorted.get(j) < min) {
min = unsorted.get(j);
index = j;
}
}
unsorted.remove(index);
sorted.add(min);
}
return unsorted.toArray();
}
但是,當我運行該方法時,我得到了相同的匯入陣列。當我使用 print 檢查時,將 int[] 轉換為 ArrayList<Integer> 的第一個 for 回圈顯然有效,因此問題很可能出現在第二個 for 回圈中。
我也嘗試過其他插入排序方法,但我不確定我在使用這種排序方法時做錯了什么。我在某個地方完全搞砸了嗎?或者這種方法是不可能的?在此先感謝您的幫助!
uj5u.com熱心網友回復:
首先,您應該回傳已排序的陣列而不是未排序的陣列。在回圈頭中使用 unsorted.size() 時也應該小心,因為程式將在每次迭代完成時呼叫該方法。但是由于您使用 減小回圈內部的大小update.remove(index),因此大小不會保持不變,您只需跳過一些值。因此,您應該在開始回圈之前將該值保存在變數中。以下代碼對我有用:
public Object[] arraySort(int[] importedArray) {
ArrayList<Integer> unsorted = new ArrayList<>();
ArrayList<Integer> sorted = new ArrayList<>();
for (int i = 0; i < importedArray.length; i ) {
unsorted.add(importedArray[i]);
}
int size = unsorted.size();
for (int i = 0; i < size; i ) {
int min = Integer.MAX_VALUE;
int index = 0;
for (int j = 0; j < unsorted.size(); j ) {
if (unsorted.get(j) < min) {
min = unsorted.get(j);
index = j;
}
}
unsorted.remove(index);
sorted.add(min);
}
return sorted.toArray();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/452458.html
上一篇:xsltprocXML決議器多值
