您的位置:首页 > 其它

常规排序:冒泡,选择,快速排序

2016-03-10 15:07 459 查看

冒泡排序法

function bubbleSort(&$arr){
$temp = 0;
$flag = false;

for($i=0;$i<count($arr)-1;$i++){
for ($j=0;$j<count($arr)-1-$i;$j++){
//从小到大排
if($arr[$j]>$arr[$j+1]){
$temp = $arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}

if(!$flag) break;
$flag = false;
}
}


选择排序法

function selectSort(&$arr){
$temp = 0;

for($i=0;$i<count($arr)-1;$i++){
//假设$i就是最小的数字并记录下标值
$minVal = $arr[$i];
$minIndex = $i;

for($j=$i+1;$j<count($arr);$j++){
//从小到大排
if($minVal>$arr[$j]){
$minVal = $arr[$j];
$minIndex = $j;
}
}

$temp = $arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $temp;
}
}


快速排序法1

function insertSort(&$arr){
//先默认下标为0的这个数已经是有序,从第2个开始
for($i=1;$i<count($arr);$i++){
$insertVal = $arr[$i];   //$insertVal是准备插入的数
$insertIndex = $i-1;     //准备先和$insertIndex进行比较

//如果这个条件满足,说明我们还没有打到适当的位子
while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
//同时把数字后移
$arr[$insertIndex+1] = $arr[$insertIndex];
$insertIndex--;
}

//插入--这时就给$insertVal找到适当的位子
if(($insertIndex+1)!=$i)
$arr[$insertIndex+1]=$insertVal;
}
}


快速排序法2

function quickSort($left,$right,&$arr){
$l = $left;
$r = $right;
$pivot = $arr[($left+$right)/2];
$temp = 0;

while ($l<$r){
while ($arr[$l]<$pivot) $l++;
while ($arr[$r]>$pivot) $r--;

if($l>=$r) break;

$temp = $arr[$l];
$arr[$l] = $arr[$r];
$arr[$r] = $temp;

if($arr[$l] == $pivot) --$r;
if($arr[$r] == $pivot) ++$l;
}

if($l==$r){
$l++;
$r--;
}

if($left<$r) quickSort($left,$r,$arr);
if($right>$l) quickSort($l,$right,$arr);
}


Test…

$arr = array();
for($k=0;$k<=5000;$k++){
$arr[$k]=rand(0,200);
}

$nowTime = date('Y-m-d H:i:s');
echo 'now time is :'.$nowTime;

//selectSort($arr);
//insertSort($arr);
//bubbleSort($arr);
quickSort(0,count($arr)-1,$arr);

//print_r($arr);

$nowTime = date('Y-m-d H:i:s');
echo '<br />exe after time is:'.$nowTime;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息