2012-06-13 122 views
0

我正在研究關於泡沫排序策略在PHP中,你可以看到代碼Here, 在主循環,有兩個條件需要是真的,所以循環將運行,我知道變量是becouse我們不希望我們的循環,直到連陣列已經排序它的最大迭代運行,但我不明白爲什麼我們需要檢查,看看是否我們已經鑽進了最大迭代?爲什麼不能我們只是檢查變量(我的假設是,我們可以有一些變量的問題,我們不希望一個永恆的循環)。任何方式我不知道,我會很感激,如果有一個人能告訴我,爲什麼我們不需要在主循環只檢查變量,謝謝大家,有一個愉快的一天。泡沫,排序,策略

function sort(array &$vec) 
    { 
     $sorted = false; 
     $size = sizeof($vec); 
     for($i=0; $i<=$size-2 && !$sorted; $i++) 
     { 
      $maybeSorted = true; 
      $from = 0; 
      $till = $size-1-$i; 
      for($j=$from; $j<$till; $j++) 
      { 
       if($vec[$j]>$vec[$j+1]) 
       { 
        $maybeSorted = false; 
        $temp = $vec[$j]; 
        $vec[$j] = $vec[$j+1]; 
        $vec[$j+1] = $temp; 
       } 
      } 
      if($maybeSorted) 
      { 
       $sorted = true; 
      } 
     } 
    } 

回答

0

您可以檢查出this wikipedia link,那裏你可以找到在僞代碼的算法用於。嘗試理解每一步,並以您的首選語言開始新的實施。這是學習某事的最佳方式。新!

冒泡排序不一樣的東西在每一輪的交換元素,並重復這一點,直到有沒有在最後一輪交換。

UPDATE一些例子有一個良好的冒泡排序算法用於:

function sort(array &$vec) { 
    $n = sizeof($vec); 

    do { 
    $newn = 1; 
    for ($i = 0; $i < ($n - 1); $i++) { 
     if ($vec[$i] > $vec[$i + 1]) { 
     $tmp   = $vec[$i]; 
     $vec[$i]  = $vec[$i + 1]; 
     $vec[$i + 1] = $tmp; 
     $newn  = $i + 1; 
     } 
    } 
    $n = $newn; 
    } while ($n > 1); 
} 
  1. 獲取數組中元素的個數(我們預計,沒有什麼是正確的,現在排序)
  2. 循環,同時也有元素$n未排序如此$n > 1
  3. for循環中我們檢查元素並檢查它們是否需要交換
  4. 我們做到這一點,直到沒有元素交換所以$n> 1

例子:

| 55 | 7 | 78 | 12 | 42 | 1. run 
| 7 | 55 | 78 | 12 | 42 | 
| 7 | 55 | 12 | 78 | 42 | 
| 7 | 55 | 12 | 42 | 78 | last comparison 
| 7 | 55 | 12 | 42 | 78 | 2. run 
| 7 | 12 | 55 | 42 | 78 | 
| 7 | 12 | 42 | 55 | 78 | last comparison (we now 78 is sorted!) 
| 7 | 12 | 42 | 55 | 78 | 3. run 
| 7 | 12 | 42 | 55 | 78 | sorted! (nothing was swapped) 

(未經測試,但應工作),我希望這會幫助你。

+0

謝謝你的回答,但我內心深處的PHP,我已經研究它在PHP的長期研究OOP,你可以請高我,爲什麼我不需要只檢查$存儲的變量... – Blanktext

+0

你可以也重新實現這個代碼在PHP中;)只有學習功能的算法。 你需要檢查的唯一的事情是,如果沒有什麼在最後一輪切換,因爲當你達到最大運行的,這也將是如此。如果您同時選中,您將始終擁有最多的運行次數。 – tbraun89

+0

Mabye我不明白你,這裏是我所知道的:我必須條件1是最大循環,另一個條件是變量,我知道有變量是檢查我們是否在最終數組之前得到最終數組循環,但我不明白爲什麼我們既需要是真實的最大循環和變量,如果你能請幫助我理解爲什麼我們需要最大循環是真實的。 – Blanktext