2.请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。
常见的排序算法:冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插入排序法、希尔排序法、合并排序法。
冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。
//冒泡排序法
Function mysort($arr){
For($i=0;$i<count($arr); $i++){
For($j=0; $j<count($arr)-1-$i; $j++){
If($arr[$j]> $arr[$j+1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
}
}
}
Return$arr;
}
$arr=array(3,2,1);
print_r(mysort($arr));
2.
<?php
//php algorithm bubble
// 3, 8 , 99, 75, 23, 1, 29, 51, 24, 13, 78.
//第一次循环,如果有小元素就往后走,即冒泡,这样循环一次,最小的1就冒泡到最顶部了,即$array[10]=1;
//第二次循环,如果有小元素就往后走,及冒泡,这样循环一次,第二小的3就冒泡到倒数第二的位置了,即$array[9]=3;
//...以此类推。遍历循环数组的个数-1次,就按照从大到小将数组排序了,
//其中可以做些优化,第一次冒泡需要冒泡到最后一个元素,第二次就冒泡到倒数第二个元素就ok了,即count($array)-2,还可以优化的地方这里就不做深入探讨了。
function dump($arr){
echo '<pre>';
print_r($arr);
echo '</pre>';
}
$array = array(3,8,99,75,23,1,29,51,24,13,78);
dump($array);
for($i=0;$i<count($array);$i++){
for($j=0;$j<count($array)-$i-1;$j++){
if($array[$j]<$array[$j+1]){
$temp = $array[$j];
$array[$j] = $array[$j+1];
$array[$j+1] = $temp;
}
}
}
dump($array);