您的位置:首页 > 理论基础 > 数据结构算法

数据结构(7)快速排序

2014-12-20 17:06 344 查看
快速排序的基本思想描述:

对于一个长度为N的待排序数列quick_sort($array)其运用快速排序思想为:

1.如果$array中的元素个数为0,或者为1个时,则返回,否则继续

2.选取$array中的一个元素$base_value作为基准数(即枢轴).

3.将所有小于或等于$base_value的元素都放在基准数的左边,将所有大于$base_value的元素放在基准数的右边.

4.再分别从其$base_value左边的数组和右边的数组中选取出一个基准数,再分别进行第3步的步骤

5.当所有所分的$array中的元素个数为0或者为一个时,则证明已经将所有元素进行排序完成

快速排序的PHP实现:

<?php

function quick_sort($array){
$length = count($array); //获取数组长度
//判断数组长度,若其长度小于或等于1,则证明该数组已经排序完成过者为无效数组
if($length <= 1)
{
return $array;
}
$base_value = $array[0]; //设第一个值为基准数
$array_left = array();//该数组用于存放小于或等于基准数的值
$array_right = array(); //该数组用于存放大于基准数的值
for ($i=1;$i<$length;$i++)
{
//从左至右寻找第一个小于基准数的值
if($array[$i] <= $base_value){
$array_left[] = $array[$i];
}else{
$array_right[] = $array[$i];
}
}

/**********************递归排序**************************/

//对小于或等于基准数的数组进行一样的排序步骤
$array_left = quick_sort($array_left);
//对大于基准数的数组进行一样的排序步骤
$array_right = quick_sort($array_right);

//将排完序后的基准数左边的数组和基准数右边的数组进行合并
return array_merge($array_left,array($base_value),$array_right);
}

$arr=array(34,75,44,21,38,9,64,19,88,15);

$res=quick_sort($arr);
foreach($res as $key => $value){
echo "key: ".$key."value :".$value."<br/>";
}

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息