2015-06-15 33 views
-1

首先,你能告訴我哪一段代碼更適合選擇排序嗎?那麼如果你知道更好的選擇排序方法,你可以分享一下嗎?更好的選擇排序Java

注意:請仔細檢查第二個代碼,因爲它比看上去更復雜。

class SelectionSort { 

    public static void selectionSort(double[] list) { 
     for (int i = 0; i < list.length - 1; i++) { 

      double currentMin = list[i]; 
      int currentMinIndex = i; 

      for (int j = i + 1; j < list.length; j++) { 
       if (currentMin > list[j]) { 
        currentMin = list[j]; 
        currentMinIndex = j; 
       } 
      } 

      if (currentMinIndex != i) { 
       list[currentMinIndex] = list[i]; 
       list[i] = currentMin; 
      } 
     } 
    } 
} 

class SelectionSort { 

    public static double[] selectionSort(double[] array) { 
     for (int i = 0; i < array.length; i++) { 
      for (int j = 0; j < i; j++) { 
       if (array[j] > array[i]) { 
        double temp = array[j]; 
        array[j] = array[i]; 
        array[i] = temp; 
       } 
      } 
     } 
    } 
} 

回答

0

表現明智,都是相似的,O(n2)。第二個代碼雖然有點乾淨。

1

兩種方法都可以解決您的問題,但第二種方法很明顯,我認爲它會更快。爲什麼?因爲它不得不採取更少的行動來完成這個問題:在第一個中你有2個循環(就像在第二個循環中一樣),但是如果在第二個循環中它必須做2個ifs和1個循環。我對此並不確定,但是,如果程序不得不減少行動,速度會更快(只是一個假設)。我認爲它會更快,因爲在第一個中,你通過所有的j元素,其中一些不需要(你必須做一個額外的if),在第二個元素中,你只需要通過元素你需要這樣更有效率。

所以,最後,我認爲你必須使用它的最佳做法是第二個。

我希望它能幫助你一點!