一、排序
有个数组需要排序:$arr = array(3,5,8,4,9,6,1,7,2);
首先我们可以用API方法给其排序:
- sort() - 以升序对数组排序
- rsort() - 以降序对数组排序
- asort() - 根据值,以升序对关联数组进行排序
- ksort() - 根据键,以升序对关联数组进行排序
- arsort() - 根据值,以降序对关联数组进行排序
- krsort() - 根据键,以降序对关联数组进行排序
然后就是算法排序:
①冒泡算法:
索引值i处的值与后边的所有值比较,若符合条件就替换
//冒泡排序
function BubbleSort($arr){
$length = count($arr);
if($length<=1){
return $arr;
}
for($i=0;$i<$length;$i++){
for($j=$length-1;$j>$i;$j--){
if($arr[$j]<$arr[$j-1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
}
return $arr;
}
②快速排序:
设置一个枢轴与左右两个数组,让这个枢轴与其他数对比,按照大小分别放入左右组中。在该函数中内部递归排序再次左右分组,最终分为一个数组只有一个值,合并左,枢轴,右三部分。
//快速排序
function QSort($arr){
$length = count($arr);
if($length <=1){
return $arr;
}
$pivot = $arr[0];//枢轴
$left_arr = array();
$right_arr = array();
for($i=1;$i<$length;$i++){//注意$i从1开始0是枢轴
if($arr[$i]<=$pivot){
$left_arr[] = $arr[$i];
}else{
$right_arr[] = $arr[$i];
}
}
$left_arr = QSort($left_arr);//递归排序左半部分 1,2,3,5,6
$right_arr = QSort($right_arr);//递归排序右半部份8 9,10
return array_merge($left_arr,array($pivot),$right_arr);//合并左半部分、枢轴、右半部分
}
③插入排序
索引值i的值与其前边的值作比较,符合条件的就把前边的值赋给该索引位置,按照这个步骤一直往前走,最后把原来i处的值与最后一步的值实现交换。(与冒泡相反)
//插入排序
$arr = array(3,5,8,4,9,6,1,7,2);
function InsertSort($arr){
$length = count($arr);
if($length <=1){
return $arr;
}
for($i=1;$i<$length;$i++){
$x = $arr[$i];
$j = $i-1;
while($j>=0&&$x<$arr[$j] ){
$arr[$j+1] = $arr[$j];
$j--;
}
$arr[$j+1] = $x;
}
return $arr;
}
echo '插入排序:';
echo implode(' ',InsertSort($arr))."<br/>";