您的位置:首页 > 编程语言 > PHP开发

php实现几种排序

2015-08-13 17:57 585 查看
第一:冒牌排序

<?php
error_reporting(0);
$arr=array(0,5,-1,9,3);
//将数据从小排序
function bubblesort(&$arr)
{
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;
}

}
}
print_r($arr);
echo "内层";
}
bubblesort($arr);
print_r($arr);
?>


第二:选择排序

每一次遍历找到最小的放到前边去

<?php
error_reporting(0);
$arr=array(0,5,-1,9,3);
function selectsort(&$arr)
{
for($i=0;$i<count($arr)-1;$i++)
{
$min=$arr[$i];
//记录下标值
$minindex=$i;
for($j=$i+1;$j<count($arr);$j++)
{
if($min>$arr[$j])
{
$min=$arr[$j];
$minindex=$j;
}
}
$temp=$arr[$i];
$arr[$i]=$arr[$minindex];
$arr[$minindex]=$temp;
}
print_r($arr);
}
selectsort($arr);
print_r($arr);
?>


第三:插入排序

<?php
error_reporting(0);
$arr=array(0,5,-1,9,3);
function insertsort(&$arr)
{
//默认下标为0的为有序的
for($i=1;$i<count($arr);$i++)
{
$insertval=$arr[$i];
//准备先和这个比较
$insertindex=$i-1;

while($insertindex>=0&&$insertval<$arr[$insertindex])
{
$arr[$insertindex+1]=$arr[$insertindex];//注意移位
$insertindex--;
}
if($arr[$insertindex+1]!=$insertval)//优化同值交换
$arr[$insertindex+1]=$insertval;
}
}
insertsort($arr);
print_r($arr);
?>


四:快速排序

<?php
error_reporting(0);
$arr=array();
for($i=0;$i<200000;$i++)
{
$arr1=rand(0, 3000);
$arr[$i]=$arr1;
}
date_default_timezone_set('Asia/Shanghai');

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);

}
$today=date('Y-n-d G:i:s' );
echo "排序之前时间:".$today;
quicksort(0, count($arr)-1,$arr);
echo "排序之后时间:".$today."<br>";
//print_r($arr);
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: