冒泡排序(Bubble Sort),重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
冒泡排序算法的原理如下:
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
function BubbleSort($a,$sort = null){
//冒泡排序
//$a为输入的整数数组; $sort为排序类型,desc降序,asc升序,若为空或其他则返回原数组
//若比较一遍后没交换元素的位置,则说明数组已有序
$n = count($a);
for($i=0;$i<=$n-2;$i++){
$olda = $a;
for($j=0;$j<=$n-2-$i;$j++){
if($sort=='asc'){
//把大的移至后面,小的推到前面
if($a[$j+1]<$a[$j]){
$maxValue = $a[$j];
$a[$j] = $a[$j+1];
$a[$j+1] = $maxValue;
}
}
if($sort=='desc'){
//把小的移至后面,大的推到前面
if($a[$j+1]>$a[$j]){
$minValue = $a[$j];
$a[$j] = $a[$j+1];
$a[$j+1] = $minValue;
}
}
}
if($a==$olda){break;}
}
return $a;
}
$shuji = array(89,45,68,90,29,34,17);
print_r($shuji);
echo '<br />';
$shuji = BubbleSort($shuji,'desc');
print_r($shuji);