2015-12-07 84 views
0

我剛剛創建了一個名爲'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; 
     } 
    } 
} 

回答

1

嘗試的數目更改代碼作爲

//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; 
      } 
     } // closing parenthesis here 
     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; 
      } 
     } // closing parenthesis here 
     temp = data[max]; 
     data[max] = data[index]; 
     data[index] = temp; 
    } 
} 

P.S.爲升序排序,你可以使用

Arrays.sort(array); 

和降序

Integer[] arr = {2, 5, 3, 6, 1}; 
Arrays.sort(arr, Collections.reverseOrder()); 
+0

我還沒有實際運行這個,但我認爲你是「交換」的元素太多次。內循環是找到下一個要交換的元素,然後在該循​​環之後用當前索引交換。 –

+0

您在循環的每次迭代中交換元素 – Evgeny

+0

不,我說你在* for循環之後交換*。您的修改現在是正確的。 –