<?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/>";
?>
复制代码