我剛剛創建了一個名爲'Statistics'的int []類,它有兩個選擇排序方法,用於按升序或降序列出統計對象(int [])中的整數。當我使用這些方法中的任何一種時,他們傾向於工作大約一半時間,然後在另一半時間工作。這裏是我的意思了幾個例子:Java選擇排序不能正常工作
新潤
測試1 = {2,5,3,7,8,9,6}
Test1.sortDataDsc()會給我:測試1 = {8,7,6,9,3,5,2}
Test1A = {8,7,6,9,3,5,2}
Test1A.sortDataAsc()會給我: {2,5,3,6,7,8,9}
New Run
測試1 = {2,5,3,7,8,9,6}
如果我Test1.sortDataAsc()首先,將數據正確地進行排序,並也正確,如果我降序排序它那樣做之後。
新潤
的Test2 = {7,4,5,8,0,1}
Test2.sortDataAsc()會給我:{1,0,4,5,7,8 }。
然後,它會按降序正確地對這些數字進行排序,並返回到正確的升序。
如果您按相同順序輸入數字,我所嘗試的所有測試用例都是可重複的。如果您更改數字的順序,那麼輸出可能是正確的,或者可能是錯誤的順序。我排除了每個我能想到的問題,這可能會導致這種情況,而且在測試用例之間找不到任何相似之處。如果任何人看到我的代碼中的任何東西,我可以修復或補充這種情況,這將不勝感激。
計數=元件的陣列中
//sortDataAsc Method - Sorts data elements in Statistics array from least to greatest
public void sortDataAsc(){
int min, temp;
for(int index = 0; index < count; index++){
min = index;
for(int scan = index + 1; scan < count; scan++){
if(data[scan] < data[min]){
min = scan;
}
temp = data[min];
data[min] = data[index];
data[index] = temp;
}
}
}
//sortDataDsc Method - Sorts data elements in Statistics array from greatest to least
public void sortDataDsc(){
int max, temp;
for(int index = 0; index < count; index++){
max = index;
for(int scan = index + 1; scan < count; scan++){
if(data[scan] > data[max]){
max = scan;
}
temp = data[max];
data[max] = data[index];
data[index] = temp;
}
}
}
我還沒有實際運行這個,但我認爲你是「交換」的元素太多次。內循環是找到下一個要交換的元素,然後在該循環之後用當前索引交換。 –
您在循環的每次迭代中交換元素 – Evgeny
不,我說你在* for循環之後交換*。您的修改現在是正確的。 –