• 欢迎访问 追梦人 网站

PHP中的四种算法

PHP dreamren 2个月前 (07-17) 95次浏览 未收录 0个评论 扫描二维码

/**
* [bubble_sort 冒泡排序]
* [url=home.php?mod=space&uid=952169]@Param[/url] [array] $data [需要排序的数据(相邻的数据进行比较调换位置)]
* [url=home.php?mod=space&uid=155549]@Return[/url] [array] [排序好的数据]
*/
function bubble_sort($data)
{
if(!empty($data) && is_array($data))
{
$len = count($data);
for($i=0; $i<$len; $i++)
{
for($k=0; $k<$len-1; $k++) { if($data[$k] > $data[$i])
{
$data[$i] = $data[$i] ^ $data[$k];
$data[$k] = $data[$i] ^ $data[$k];
$data[$i] = $data[$i] ^ $data[$k];
}
}
}
}
return $data;
}

/**
* [select_sort 选择排序]
* @param [array] $data [需要排序的数据(选择最小的值与第一个调换位置)]
* @return [array] [排序好的数据]
*/
function select_sort($data)
{
if(!empty($data) && is_array($data))
{
$len = count($data);
for($i=0; $i<$len; $i++)
{
$t = $i;
for($j=$i+1; $j<$len; $j++) { if($data[$t] > $data[$j])
{
$t = $j;
}
}
if($t != $i)
{
$data[$i] = $data[$i] ^ $data[$t];
$data[$t] = $data[$i] ^ $data[$t];
$data[$i] = $data[$i] ^ $data[$t];
}
}
}
return $data;
}

/**
* [insert_sort 插入排序]
* @param [array] $data [需要排序的数据(把第 n 个数插到前面的有序数组中,以此反复循环直到排序好)]
* @return [array] [排序好的数据]
*/
function insert_sort($data)
{
if(!empty($data) && is_array($data))
{
$len = count($data);
for($i=1; $i<$len; $i++) { $tmp = $data[$i]; for($j=$i-1; $j>=0; $j–)
{
if($data[$j] > $tmp)
{
$data[$j+1] = $data[$j];
$data[$j] = $tmp;
} else {
break;
}
}
}
}
return $data;
}

/**
* [quick_sort 快速排序]
* @param [array] $data [需要排序的数据(选择一个基准元素,将待排序分成小和打两罐部分,以此类推递归的排序划分两罐部分)]
* @return [array] [排序好的数据]
*/
function quick_sort($data)
{
if(!empty($data) && is_array($data))
{
$len = count($data);
if($len <= 1) return $data;

$base = $data[0];
$left_array = array();
$right_array = array();
for($i=1; $i<$len; $i++) { if($base > $data[$i])
{
$left_array[] = $data[$i];
} else {
$right_array[] = $data[$i];
}
}
if(!empty($left_array)) $left_array = quick_sort($left_array);
if(!empty($right_array)) $right_array = quick_sort($right_array);

return array_merge($left_array, array($base), $right_array);
}
}

/**
* 测试
*/
$data = array(10, 3, 6, 1, 24, 18, 7, 8);
echo ‘

// 冒泡排序
print_r(bubble_sort($data));

// 选择排序
print_r(select_sort($data));

// 插入排序
print_r(insert_sort($data));

// 快速排序
print_r(quick_sort($data));

// 以下是结果
Array
(
[0] => 1
[1] => 3
[2] => 6
[3] => 7
[4] => 8
[5] => 10
[6] => 18
[7] => 24
)
Array
(
[0] => 1
[1] => 3
[2] => 6
[3] => 7
[4] => 8
[5] => 10
[6] => 18
[7] => 24
)
Array
(
[0] => 1
[1] => 3
[2] => 6
[3] => 7
[4] => 8
[5] => 10
[6] => 18
[7] => 24
)
Array
(
[0] => 1
[1] => 3
[2] => 6
[3] => 7
[4] => 8
[5] => 10
[6] => 18
[7] => 24
)
?>


追梦人博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP中的四种算法
网站部分内容来源网络,如有侵犯您的权益,请联系我们,我们会第一时间处理您的反馈信息,谢谢!!!
喜欢 (0)
[dreamren@foxmail.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址