算法基础--冒泡排序

<?php
/**
 * 唯一随机数 
 * 原理:通过数组的键值交换,达到去重唯一
 * @param $min number 最小值、$max number 最大值 、$num number 个数
 * @return array
 */
function uniqueRandom($min,$max,$num){
	$arr = [];
	$i   = 1;
	while ( $i < $num) {
		$arr[] = mt_rand($min,$max);
		//去重,数组键值交换
		$arr = array_flip(array_flip($arr));
		$i   = count($arr);
	}
	//删除原有键名,打乱重新排序(因为去重的原因,键名可能不是正序排序)
	shuffle($arr);
	return $arr;

}
/**
 * 冒泡排序
 * 原理:相邻的元素两两对比,反序刚交换位置,否则不交换
 * @param $arr array 需要排序的数组
 * @return array
 */
function bubbleSort1($arr):array
{
	$count   = count($arr)-1;
	for($i = 0;$i < $count;$i++){
		//最大的数已移至最后,不需要再对比,所以$count - $i
		for($j = 0;$j < $count - $i;$j++){
			if($arr[$j] > $arr[$j+1]){
				//交换位置
				list($arr[$j],$arr[$j+1]) = array($arr[$j+1],$arr[$j]);
			}
		}

		
	} 
	return $arr;
}
function bubbleSort2($arr):array
{
	$count   = count($arr)-1;
	$position= 0;
	for($i = 0;$i < $count ;$i++){
		//
		for($j = 0;$j < $count;$j++){
			if($arr[$j] > $arr[$j+1]){
				//交换位置
				list($arr[$j],$arr[$j+1]) = array($arr[$j+1],$arr[$j]);
				$position = $j;
			}
		}
		//最后发生交换的位置
		$count = $position;
	} 
	return $arr;
}

$arr = uniqueRandom(1,1000000,10000);
$start = time();
bubbleSort1($arr);
$end = time();
$used = $end - $start;
echo "V1 used $used s <br/>";

$start2 = time();
bubbleSort2($arr);
$end2 = time();
$used2 = $end2 - $start2;
echo "V2 used $used2 s <br/>";


?>
复制代码

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值