1、画出菱形
C经常有这样的题目
思路:需要for几行,并要知道每一行的空格和星星的递减或递加方式(与当前行数$i的关系)。
for($i=0;$i<=3;$i++){
echo str_repeat(" ",3-$i);
echo str_repeat("*",$i*2+1);
echo '<br/>';
}
2、冒泡排序
思路:从大到小或者从小到大多一个数组进行排序。
从小到大为例。从第一个开始,对整列数两两交换一次(比较并temp对换位置),最小的数在最左边,每次都能得一个在剩下的数中的最小的数,“冒”出来的数组成一个有序区间,剩下的值组成一无序区间,且有序区间中每一元素值都比无序区间的小。
时间复杂度:O(n²)
$arr = array(1,3,5,32,756,2,6);
$len = count($arr);
for ($i=0;$i<$len-1;$i++){ //执行$len-1轮的比较
for ($j=$i+1;$j<$len;$j++){//每一轮都对其中的数字进行两两比较 ,第一轮从第一个开始比较,第二轮从第二个开始....
if($arr[$i]>$arr[$j]){//从小到大,两两交换
$p = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j]= $p;
}
}
}
var_dump($arr);
3、快速排序
快速排序算法是对冒泡算法的一个优化。他的思想是先对数组进行分割, 把大的元素数值放到一个临时数组里,把小的元素数值放到另一个临时数组里(这个分割的点可以是数组中的任意一个元素值,一般用第一个元素,即$array[0]),然后继续把这两个临时数组重复上面拆分,最后把小的数组元素和大的数组元素合并起来。这里用到了递归的思想。其实还有分治的思想。
时间复杂度:O (nlogn)
function quickSort($array){
// 判断是否需要运行
if(!isset($array[1])) {return $array}; //或者 if (count($array) <= 1) { return $array; }
$mid = $array[0]; //获取一个用于分割的关键字,一般是首个元素
$leftArray = array();
$rightArray = array();
foreach($array as $v) {
if($v > $mid) { $rightArray[] = $v }//把比$mid大的数放到一个数组里
else {$leftArray[] = $v } //把比$mid小的数放到另一个数组里
}
$leftArray = quickSort($leftArray); //把比较小的数组再一次进行分割
$rightArray = quickSort($rightArray); //把比较大的数组再一次进行分割
return array_merge($leftArray,array($mid) ,$rightArray); //组合两个结果 //把分割的元素加到小的数组后面,不能忘了它哦
}

相关文献:
网友评论