標籤:
冒泡排序是非常容易理解和實現,,以從小到大排序舉例:
設數組長度為N。
1.比較相鄰的前後二個資料,如果前面資料大於後面的資料,就將二個資料交換。
2.這樣對數組的第0個資料到N-1個資料進行一次遍曆後,最大的一個資料就“沉”到數組第N-1個位置。
3.N=N-1,如果N不為0就重複前面二步,否則排序完成。
方案一:
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 }
方案二:
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 }
方案三:
設定一個標誌,如果這一趟發生了交換,則為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 }
方案四:
如果有100個數的數組,僅前面10個無序,後面90個都已排好序且都大於前面10個數字,那麼在第一趟遍曆後,最後發生交換的位置必定小於10,且這個位置之後的資料必定已經有序了,記錄下這位置,第二次只要從數組頭部遍曆到這個位置就可以了。
1 function bubble4_sort($array){ 2 $count=count($array); 3 if($count<=1){ 4 return $array; 5 } 6 $flag=$count; 7 while($flag>0){ 8 $k=$flag; 9 $flag=0;10 for($j=1;$j<$k;$j++){11 if($array[$j-1]>$array[$j]){12 $temp=$array[$j-1];13 $array[$j-1]=$array[$j];14 $array[$j]=$temp;15 $flag=$j;16 }17 }18 }19 return $array;20 }
方案五:
1 function bubble_sort($array){ 2 $count=count($array); 3 if($count<=1){ 4 return $array; 5 } 6 for($i=$count-1;$i>0;$i--){ 7 $flag=false; 8 for($j=0;$j<$count;$j++){ 9 if($array[$j]>$array[$j+1]){10 $temp=$array[$j];11 $array[$j]=$array[$j+1];12 $array[$j+1]=$temp;13 $flag=true;14 }15 }16 if(!$flag)17 break;18 }19 return $array;20 }
php實現冒泡排序