码迷,mamicode.com
首页 > 编程语言 > 详细

PHP四大经典排序算法源码

时间:2016-08-26 13:42:33      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

PHP四大经典排序算法源码

--仅供参考 欢迎点评

<?php
header("Content-Type:text/html; charset=utf-8");

// ****************************************************************
//快速排序:每次取一个比较值$key(即相应数组的$arr[0]),然后依次比较数组中的数,比比较值大的放右边并重命名为$right[],比比较值小的放左边并重命名为$left[]。再递归调用函数最后将$left[],$key,$right[]合并输出。
function quickSort($arr){
$n = count($arr);
if ($n<1) {return $arr;}
//给比较值赋值
$key = $arr[0];
//声明数组左、右数组
$left = array();
$right = array();
//数组中其他的数与比较值比较并赋给$left[]或$right[].
for($i = 1;$i < $n;$i++){
if($arr[$i] <= $key){
$left[] = $arr[$i];
}else{
$right[] = $arr[$i];
}
}
//递归调用quickSort()函数排序每个子数组.
$left = quickSort($left);
$right = quickSort($right);
//最后将$left[],$key,$right[]合并输出。
return array_merge($left,array($key),$right);
}

// ****************************************************************
//冒泡排序:每次比较和交换相邻的两个数直到比较末尾,即每次比较后将当前最大的数冒泡到了最后。一共冒泡n-1次。
function bubbleSort($arr){
$n=count($arr);
if ($n<1) {return $arr;}
//冒泡趟数外循环n-1次。
for($i=0;$i<$n-1;$i++){
//每趟循环中比较和交换次数的内循环(n-(i+1))次。
for($j=$i+1;$j<$n;$j++){
//判断并将大的数交换到后面
if($arr[$i]>$arr[$j]){
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
return $arr;
}

// ****************************************************************
//选择排序:在数组中,将最小的数通过比较放在第一个位置,然后将剩下的数最小的放在第二个位置,知道将最大的放在最后。
function selectSort($arr){
$n = count($arr);
if ($n<1) {return $arr;}
//外层循环 先假设第一个数是最小的 并将位置赋给$m
for($i=0;$i<$n;$i++){
$m=$i;
//内循环 找出余下最小值并将位置也赋给$m
for($j=$i+1;$j<$n;$j++){
if($arr[$j]<$arr[$m]){ //$arr[$m]是动态变化的,这里不能写成了$[$i]!
$m=$j;
}
}
//比较找出的最小值是不是与该层第一个数不相等,不相等就交换,否则第一个就是最小的。
if($arr[$m]!=$arr[$i]){
$temp=$arr[$m];
$arr[$m]=$arr[$i];
$arr[$i]=$temp;
}
}
return $arr;
}

// ****************************************************************
//插入排序:
function insertSort($arr) {
$n = count($arr);
if ($n<1) {return $arr;}
for($i=1;$i<$n; $i++){
$tmp = $arr[$i];
//内层循环控制,比较并插入
for($j=$i-1;$j>=0;$j--) {
if($tmp < $arr[$j]) {
//发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
} else {
//如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
break;
}
}
}
return $arr;
}

 

//数组定义、赋值
$arr0 = array(23,43,45,434,-7687,990,5,111,23);
echo "原数组是:23 43 45 434 -7687 990 5 111 23<br/>";

//1.调用快速排序
$arr1 = quickSort($arr0);
echo "快速排序的结果是:";
foreach ($arr1 as $value){
echo $value."&nbsp;";
}
echo "<br/>";

//2.调用冒泡排序
$arr2 = bubbleSort($arr0);
echo "冒泡排序的结果是:";
foreach ($arr2 as $value){
echo $value."&nbsp;";
}
echo "<br/>";

//3.调用选择排序
$arr3=selectSort($arr0);
echo "选择排序的结果是:";
foreach ($arr3 as $value) {
echo $value."&nbsp;";
}
echo "<br/>";

//4.调用插入排序
$arr4=insertSort($arr0);
echo "插入排序的结果是:";
foreach ($arr4 as $value) {
echo $value."&nbsp;";
}
echo "<br/>";
?>

PHP四大经典排序算法源码

标签:

原文地址:http://www.cnblogs.com/wxgthinking/p/5809971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!