2016-09-11 27 views
-2

在這種方法只有一個元素得到排序其餘的元素是不排序的。請澄清我這是錯的我的選擇排序代碼

請幫我尋找到實際的問題是

private static int[] selectSort(int[] arr) { 

    int n = arr.length; 
    for (int i = 0; i < n - 1; i++) { 
     int min_Ele = i; 
     for (int j = 1; j < n; j++) { 
      if (arr[j] <= arr[min_Ele]) { 
       min_Ele = j; 
      } 
     } 
     if (i != min_Ele) { 
      int tmp = arr[i]; 
      arr[i] = arr[i = min_Ele]; 
      arr[min_Ele] = tmp; 
     } 
    } 
    return arr; 
} 
+1

提示:錯誤的例如:你的命名。不要稱之爲「arr」,例如稱之爲「數字排序」。並且不叫它min_ele(使用「_」的雙重錯誤!)...例如稱它爲「indexOfSmallestNumber」。並提示:你通過使用打印語句來解決這些難題。或者通過在調試器中運行小例子。你不需要我們這樣做! – GhostCat

+0

我很新鮮的編程..所以我需要一些幫助 – naveen

回答

-3
private static int[] selectSort(int[] arr) { 

    int n = arr.length; 
    for (int i = 0; i < n-1; i++) { 
     int min_Ele = i; 
     for (int j = i+1; j < n; j++) { 
      if (arr[j] <= arr[min_Ele]) { 
       min_Ele = j; 
      } 
     } 
     if (i != min_Ele) { 
      int tmp = arr[i]; 
      arr[i] = arr[min_Ele]; 
      arr[min_Ele] = tmp; 
     } 
    } 
    return arr; 
} 
+5

這不是你如何寫出很好的答案。你不應該放棄代碼,你在原始源代碼中解釋問題;你告訴你如何修復它。對不起,您的問題與原始問題質量相同!你甚至有相同的「格式錯誤」! – GhostCat

1

你的錯誤就在於,你的內循環應該從i+1,而不是從開始1

public static int[] selectSort(int[] arr) { 

    int n = arr.length; 
    for (int i = 0; i < n - 1; i++) { 
     int min_Ele = i; 
     for (int j = i+1; j < n; j++) { 
      if (arr[j] <= arr[min_Ele]) { 
       min_Ele = j; 
      } 
     } 
     if (i != min_Ele){ 
      //swap 
      int tmp = arr[i]; 
      arr[i] = arr[i = min_Ele]; 
      arr[min_Ele] = tmp; 
     } 
    return arr; 
}