快速排序是对冒泡排序的一种改进。他的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行快速排序,整个排序过程可以递归进行,以达到整个序列有序的目的。相信你真正理解这两个排序算法后,在以后的数组排序中都是迎刃有余。<?php
$arr=array(3,2,4,5,1,8,7,6,9);
quick_sort($arr);
bubble_sort($arr);
functionbubble_sort($arr){
$num=count($arr);
for($i=0;$i
for($j=0;$j
if($arr[$j]>$arr[$j+1]){
$temp=$arr[$j+1];
$arr[$j+1]=$arr[$j];
$arr[$j]=$temp;
}
}
}
return$arr;
}
functionquick_sort($arr){
//先判断是否需要继续进行
$length=count($arr);
if($length<=1){
return$arr;
}
//如果没有返回,说明数组内的元素个数多余1个,需要排序
//选择一个标尺
//选择第一个元素
$base_num=$arr[0];
//遍历除了标尺外的所有元素,按照大小关系放入两个数组内
//初始化两个数组
$left_array=array();//小于标尺的
$right_array=array();//大于标尺的
for($i=1;$i
if($base_num>$arr[$i]){
//放入左边数组
$left_array[]=$arr[$i];
}else{
//放入右边
$right_array[]=$arr[$i];
}
}
//再分别对左边和右边的数组进行相同的排序处理方式
//递归调用这个函数,并记录结果
$left_array=quick_sort($left_array);
$right_array=quick_sort($right_array);
//合并左边标尺右边
returnarray_merge($left_array,array($base_num),$right_array);
}