php實現冒泡排序

冒泡排序是很是容易理解和實現,,以從小到大排序舉例:
設數組長度爲N。
1.比較相鄰的先後二個數據,若是前面數據大於後面的數據,就將二個數據交換。
2.這樣對數組的第0個數據到N-1個數據進行一次遍歷後,最大的一個數據就「沉」到數組第N-1個位置。
3.N=N-1,若是N不爲0就重複前面二步,不然排序完成。數組

方案一:spa

 1 function bubble1_sort($array){
 2     $count=count($array);
 3     if($count<=1){
 4         return $array;
 5     }
 6     for($i=0;$i<$count;$i++){
 7         for($j=0;$j<$count;$j++){
 8             if($array[$i]<$array[$j]){
 9                 $temp=$array[$i];
10                 $array[$i]=$array[$j];
11                 $array[$j]=$temp;
12             }
13         }
14     }
15     return $array;
16 }

 方案二:code

 1 function bubble2_sort($array){
 2     $count=count($array);
 3     if($count<=1){
 4         return $array;
 5     }
 6     
 7     for($i=0;$i<$count;$i++){
 8         for($j=1;$j<$count-$i;$j++){
 9             if($array[$j-1]>$array[$j]){
10                 $temp=$array[$j-1];
11                 $array[$j-1]=$array[$j];
12                 $array[$j]=$temp;
13             }
14         }
15     }
16     return $array;
17 }

方案三:blog

設置一個標誌,若是這一趟發生了交換,則爲true,不然爲false。明顯若是有一趟沒有發生交換,說明排序已經完成。排序

 1 function bubble3_sort($array){
 2     $count=count($array);
 3     if($count<=1){
 4         return $array;
 5     }
 6     $flag=true;
 7     $j=$count;
 8     while($flag){
 9         $flag=false;
10         for($i=1;$i<$j;$i++){
11             if($array[$i-1]>$array[$i]){
12                 $temp=$array[$i-1];
13                 $array[$i-1]=$array[$i];
14                 $array[$i]=$temp;
15                 $flag=true;
16             }
17         }
18         $j--;
19         
20     }
21     return $array;
22     
23 }

方案四:io

若是有100個數的數組,僅前面10個無序,後面90個都已排好序且都大於前面10個數字,那麼在第一趟遍歷後,最後發生交換的位置一定小於10,且這個位置以後的數據一定已經有序了,記錄下這位置,第二次只要從數組頭部遍歷到這個位置就能夠了。function

function bubble4_sort($array){
    $count=count($array);
    if($count<=1){
        return $array;
    }
    $flag=$count;
    while($flag>0){
        $k=$flag;
        $flag=0;
        for($j=1;$j<$k;$j++){
            if($array[$j-1]>$array[$j]){
                $temp=$array[$j-1];
                $array[$j-1]=$array[$j];
                $array[$j]=$temp;
                $flag=$j;
            }
        }
    }
    return $array;
}

方案五:class

function bubble_sort($array){
    $count=count($array);
    if($count<=1){
        return $array;
    }
    for($i=$count-1;$i>0;$i--){
        $flag=false;
        for($j=0;$j<$count;$j++){
            if($array[$j]>$array[$j+1]){
                $temp=$array[$j];
                $array[$j]=$array[$j+1];
                $array[$j+1]=$temp;
                $flag=true;
            }
        }
        if(!$flag)
            break;
    }
    return $array;
}
相關文章
相關標籤/搜索