2012-01-25 8 views
13

PHP에서 버블 정렬 알고리즘을 수행해야합니다.PHP에서 버블 정렬 구현?

내가 사용할 수있는 좋은 예제가 있는지 또는이를 수행 할 수있는 오픈 소스 라이브러리가 있는지 알고 싶습니다.

집합 (배열)에 몇 개의 공백이 있는데,이 공백을 객체 (사람)로 채우기 위해 공간이 남성과 여성이 될 수 없으므로 거품을 찾으려고합니다. 정렬 알고리즘.

나의 계획은 성별에 관계없이 사용할 수있는 공백을 채우고 나서 별도로 정렬하는 것입니다.

감사합니다. 예를 들어

+0

간단한 버블 정렬 구현 내 블로그 게시물을 참조 즐길 : http://blog.richardknop.com/2012/06/bubble-sort- 알고리즘 - PHP - 구현/ –

답변

19

거품을 사용하여 정렬는 아주 나쁜 생각이다. 복잡도는 O(n^2)입니다.

실제로는 병합 정렬 구현이며 O(n*log(n))의 복잡성을 보장하는 PHP usort을 사용해야합니다.

PHP 매뉴얼에서 샘플 코드 -

function cmp($a, $b) { 
    if( $a->weight == $b->weight){ return 0 ; } 
    return ($a->weight < $b->weight) ? -1 : 1; 
} 

usort($unsortedObjectArray,'cmp'); 
+0

하지만 내 필요가 정렬뿐만 아니라, 그 공간 (사람)을 할당해야합니다 – nivanka

+0

그래! 당신도 그렇게 할 수 있습니다. BTW, 내 해결책을 제대로 얻지 못했을 것 같아. – Rifat

+0

if ($ a-> weight == $ b-> weight) {return 0; } 반품 ($ a-> weight < $b->)? -1 : 1; --- 이것은 중요한 것입니다. – nivanka

21
function bubble_sort($arr) { 
    $size = count($arr)-1; 
    for ($i=0; $i<$size; $i++) { 
     for ($j=0; $j<$size-$i; $j++) { 
      $k = $j+1; 
      if ($arr[$k] < $arr[$j]) { 
       // Swap elements at indices: $j, $k 
       list($arr[$j], $arr[$k]) = array($arr[$k], $arr[$j]); 
      } 
     } 
    } 
    return $arr; 
} 

:

$arr = array(1,3,2,8,5,7,4,0); 

print("Before sorting"); 
print_r($arr); 

$arr = bubble_sort($arr); 
print("After sorting by using bubble sort"); 
print_r($arr); 
+1

최고의 정렬 알고리즘은 빠른 정렬입니다. O (nlog (n))를 사용하면 더 빠르게 알고리즘을 정렬 할 수 있습니다. 당신은 그것을 여기에서 볼 수있다 : http://www.phptutorialonline.com/php-quicksort.aspx – JackTurky

+0

스왑이 없을 때 루프가 멈추지 않는다. while 루프를 사용하거나 중단해야한다. – user2997418

+0

@ foreground 루프를 사용하면 더 빨리 수행 할 수있다. – FluorescentGreen5

5
 

$numbers = array(1,3,2,5,2); 
$array_size = count($numbers); 

echo "Numbers before sort: "; 
for ($i = 0; $i < $array_size; $i++) 
    echo $numbers[$i]; 
echo "n"; 

for ($i = 0; $i < $array_size; $i++) 
{ 
    for ($j = 0; $j < $array_size; $j++) 
    { 
     if ($numbers[$i] < $numbers[$j]) 
     { 
     $temp = $numbers[$i]; 
     $numbers[$i] = $numbers[$j]; 
     $numbers[$j] = $temp; 
     } 
    } 
} 

echo "Numbers after sort: "; 
for($i = 0; $i < $array_size; $i++) 
    echo $numbers[$i]; 
echo "n"; 
 
+0

이것에 대해 고마워, 이것은 @ JackTurky의 대답과 같은 것처럼 보입니다. – nivanka

0

어쩌면 누군가가 버블 정렬의 유용 내 버전을 찾습니다 코멘트 위에서

function BubbleSort(&$L) 
{ 
    $rm_key = count($L); 
    while(--$rm_key > -1)#after this the very first time it will point to the last element 
     for($i=0; $i<$rm_key; $i++) 
      if($L[$i] > $L[$i+1]) 
       list($L[$i],$L[$i+1]) = array($L[$i+1],$L[$i]);   
} 

내가 스왑 아이디어 (사용 목록)를 가지고있다.

2
function bubble_sort($arr) { 
    $n = count($arr); 
    do { 
     $swapped = false; 
     for ($i = 0; $i < $n - 1; $i++) { 
      // swap when out of order 
      if ($arr[$i] > $arr[$i + 1]) { 
       $temp = $arr[$i]; 
       $arr[$i] = $arr[$i + 1]; 
       $arr[$i + 1] = $temp; 
       $swapped = true; 
      } 
     } 
     $n--; 
    } 
    while ($swapped); 
    return $arr; 
} 
+0

이봐, 고마워. 네가 이기지 못했다는 걸 알지만,이게 내가 찾던 정확한 논리 야! – pappy

0
function bubbleSort(array $arr) 
    { 
     $n = sizeof($arr); 
     for ($i = 1; $i < $n; $i++) { 
      for ($j = $n - 1; $j >= $i; $j--) { 
       if($arr[$j-1] > $arr[$j]) { 
        $tmp = $arr[$j - 1]; 
        $arr[$j - 1] = $arr[$j]; 
        $arr[$j] = $tmp; 
       } 
      } 
     } 

     return $arr; 
    } 

    // Example: 
    $arr = array(255,1,22,3,45,5); 
    $result = bubbleSort($arr); 
    print_r($result); 
//==================================================== 
//------- improved version---------------------------- 
//====================================================  
function bubbleSortImproved(array $arr) 
{ 
    $n = sizeof($arr);  
    for ($i = 1; $i < $n; $i++) { 
     $flag = false; 
     for ($j = $n - 1; $j >= $i; $j--) { 
      if($arr[$j-1] > $arr[$j]) { 
       $tmp = $arr[$j - 1]; 
       $arr[$j - 1] = $arr[$j]; 
       $arr[$j] = $tmp; 
       $flag = true; 
      } 
     } 
     if (!$flag) { 
      break; 
     } 
    } 

    return $arr; 
} 

// Example: 
$arr = array(255,1,22,3,45,5); 
$result = bubbleSortImproved($arr); 
print_r($result); 
0

개선 버블 정렬 :

$sortarr = array(3,5,15,3,2,6,7,50,1,4,5,2,100,9,3,2,6,7,13,18); 

    echo "<pre>"; 
    // Array to be sorted 
    print_r($sortarr); 
    // Sorted Array 
    print_r(bubble_sort($sortarr)); 
    echo "<pre>"; 

    function bubble_sort($sortarr){ 
     // Bubble sorting 
     $array_count = count($sortarr); 
     for($x = 0; $x < $array_count; $x++){ 
      for($a = 0 ; $a < $array_count - 1 ; $a++){ 
       if($a < $array_count){ 
        if($sortarr[$a] > $sortarr[$a + 1]){ 
          swap($sortarr, $a, $a+1); 
        } 
       } 
      } 
     } 
     return $sortarr;  
    } 

    function swap(&$arr, $a, $b) { 
     $tmp = $arr[$a]; 
     $arr[$a] = $arr[$b]; 
     $arr[$b] = $tmp; 
    }