/* 這是提示:以一個(gè)未排序的數(shù)組 a 開頭輸出:排序數(shù)組a。找出數(shù)組a[1:n]中最小的元素,稱其為a[j]。如果它小于 a[0],則將其與 a[0] 交換。用索引 1, 2, ... 重復(fù)這個(gè)過程,直到 who 數(shù)組被排序。*/public class assing2 {public static void main(String args[]) { //array of ints int[] A = new int[] {33, 20, 8, 11, 5}; int min_id = 0; int temp_i = 0; //int temp_max = 0; for (int i = 0; i < A.length; i++) { min_id = i; temp_i = A[i]; for (int j = 1; j < A.length; j++) { if (A[min_id] > A[j]) { min_id = j; } } A[i] = A[min_id]; A[min_id] = temp_i; } System.out.println("Sorted array"); for ( int i = 0; i < A.length; i++) { System.out.println(A[i]); }} }這是輸出排序數(shù)組52011338當(dāng)我在調(diào)試器中運(yùn)行它時(shí),我可以看到第一個(gè) for 循環(huán)的前 2 次迭代看起來像它的工作,但之后它對排序的內(nèi)容進(jìn)行了排序。我的邏輯有什么問題?
為什么我的排序算法在 for 循環(huán)的第三次迭代后失?。?/h1>
1 回答

慕斯王
TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
for (int j = 1; j < A.length; j++)
是錯(cuò)的。您應(yīng)該只檢查 i 之后的元素,因?yàn)?i 之前的元素按之前的迭代排序。所以應(yīng)該是
for(int j = i+1; j < A.length; j++)
同樣在第一個(gè)循環(huán)中,您不需要對最后一個(gè)元素做任何事情。您可以將停止條件更改為i<A.length-1
添加回答
舉報(bào)
0/150
提交
取消