2013-07-24 27 views
0

我有以下的算法來訂購一個.txt文件與10號這個排序算法爲什麼起作用?

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

它爲了寫入所有的數字一個新的.txt文件。但用紙筆說,它不應該工作。這是以下幾點:

7 10 4 3 5 8 1 3 

算法應該這樣做:

10 7 4 3 5 8 1 3 
10 8 4 3 5 7 1 3 
10 8 5 3 4 7 1 3 
10 8 5 4 3 7 1 3 
10 8 5 4 7 3 1 3 
10 8 5 4 7 3 3 1 

顯然,最後一行是不是爲了,那麼,爲什麼是代碼這樣做對嗎?或者...當我用筆和紙做錯時,我錯在哪裏?

+0

算法在'i = 0'開始時將最大的元素放到最後。漂亮的基本排序算法的複雜性爲O(n2) – Shivam

+0

哇,花了我一段時間,看看它不是泡沫排序。 – Sentry

回答

0

我會重新檢查你的第三個結果是:

你結束了 '5' 作爲你的第三個數字是交換後'4'出來,但是這還沒有完成。如果你繼續迭代'j'循環,它將繼續測試其餘的數字。如果我們運行正常循環會看起來更象這樣:

Starting with 10 8 4 3 5 7 1 3 where i points to the third digit '4': 
if (4 < 4) false // This is an unecessary step FYI, should start the loop with j=i+1 
if (4 < 3) false 
if (4 < 5) true, swap 4 with 5 = 10 8 5 3 4 7 1 3 
    // This is where you seem to have stopped your loop and jumped directly to the next i, 
    // However, there is no break and the j loop should continue on using the new third 
    // digit '5'... 
if (5 < 7) true, swap 5 with 7 = 10 8 7 3 4 5 1 3 
if (7 < 1) false 
if (7 < 3) false 

你,結果10 8 7 3 4 5 1 3作爲第三次迭代結束。

5

爲什麼它不應該工作?這是一個非常基本的排序算法(稱爲selection sort)。你的鋼筆和鉛筆的問題是你忘記了外部的for。其中繼續排序每個項目。這就是爲什麼它的複雜性爲O(n^2)

0

爲什麼它不工作?對於每個位置i,內部循環有效地將列表中其餘部分的最大成員移動到該位置(使其成爲選擇排序)。

我認爲你的論文在第三步中出現了問題;我得到:

7 10 4 3 5 8 1 3 <- original list 
^i 
10 7 4 3 5 8 1 3 
    ^i 
10 8 4 3 5 7 1 3 
    ^i 
10 8 7 3 4 5 1 3 
     ^i 
10 8 7 5 3 4 1 3 
...