php实现冒泡排序
冒泡排序是非常容易理解和实现,,以从小到大排序举例:
设数组长度为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,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。
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; }
方案五:
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; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。