2014-01-24 197 views
4

我似乎無法理解這種特定的算法。它似乎是bubblesort,但不是傳統意義上的。它是什麼?這是什麼算法?

public static void main(String[] args) 
{ 
    double[] a = {0.75, 0.5, 1.0};       
    sort(a); 

    for (int i = 0; i < a.length; i++) 
     System.out.println(a[i]); 
} 

public static void sort(double[] tal) 
{ 
    double p = 0; 
    int k = 0; 

    for (int i = 0; i < tal.length - 1; i++) 
    { 
     k = i; 
     for (int j = i + 1; j < tal.length; j++) 
     { 
      if (tal[j] < tal[k]) 
       k = j; 
     } 

     p = tal[i]; 
     tal[i] = tal[k]; 
     tal[k] = p; 
    } 
} 

回答

23

起初,我錯誤地認爲它是一個Insertion sort。這是一個Selection sort(從維基百科條目)

Selection sort

+3

不錯的動畫,但OP算法不是插入排序。 – Henry

+4

+1爲獲得選票的智能方式;) –

+0

Elliot,你是如何製作動畫的? – committedandroider

5

這是一個selection sort。內循環找到剩餘元素中最小的元素,然後與未排序範圍的第一個元素進行交換。

+1

內聯掉期比使用獨立掉期方法要快一點。 – WonderWorld

+1

您能否詳細說明所聲稱的低效率?該代碼使用局部變量來存儲最小元素的索引,並且只爲下一個元素進行交換。我不確定你將如何顯着改善。 – Dukeling

+1

@Dukeling仔細檢查你是對的,我忽略了交換沒有發生在內部循環中。 – Henry