蛮力法——冒泡排序(PHP)

    冒泡排序(Bubble Sort),重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

    冒泡排序算法的原理如下:
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

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);
发布了3 篇原创文章 · 获赞 0 · 访问量 405

猜你喜欢

转载自blog.csdn.net/e1951/article/details/80839147