2012-06-13 124 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