快速排序法:
个人认为最好理解的排序算法
<?php
$arr=array(23,55,226,345,37,52,256);
function quick($arr) {
//先判断是否需要继续进行
$length = count($arr);
if($length <= 1) {
return $arr;
}
//如果没有返回,说明数组内的元素个数大于1,需要排序
//遍历 除了$arr[0]的所有元素,按照大小关系放入两个数组内
//初始化两个数组
$left = array();//小于$arr[0]的
$right = array();//大于$arr[0]的
//选择第一个元素作为比较值
for($i=1; $i<$length; $i++) {
if($arr[0]> $arr[$i]) {
//放入左边数组
$left[] = $arr[$i];
} else {
//放入右边
$right[] = $arr[$i];
}
}
//再分别对左边和右边的数组进行相同的排序处理方式
//递归调用这个函数,并记录结果
$left= quick($left);
$right= quick($right);
//合并左边 标尺 右边
return array_merge($left, array($arr[0]), $right);
}
echo "<pre/>";
print_r(quick($arr));
个人认为最好理解的排序算法
思路:选定数组中第一个元素为比较,设定两个空数组,一个左数组一个右数组,比第一个元素大的在右面,比第一个元素小的在左面,归类后将数组合并
<?php
$arr=array(23,55,226,345,37,52,256);
function quick($arr) {
//先判断是否需要继续进行
$length = count($arr);
if($length <= 1) {
return $arr;
}
//如果没有返回,说明数组内的元素个数大于1,需要排序
//遍历 除了$arr[0]的所有元素,按照大小关系放入两个数组内
//初始化两个数组
$left = array();//小于$arr[0]的
$right = array();//大于$arr[0]的
//选择第一个元素作为比较值
for($i=1; $i<$length; $i++) {
if($arr[0]> $arr[$i]) {
//放入左边数组
$left[] = $arr[$i];
} else {
//放入右边
$right[] = $arr[$i];
}
}
//再分别对左边和右边的数组进行相同的排序处理方式
//递归调用这个函数,并记录结果
$left= quick($left);
$right= quick($right);
//合并左边 标尺 右边
return array_merge($left, array($arr[0]), $right);
}
echo "<pre/>";
print_r(quick($arr));