u 數組的排序php
這裏咱們介紹一些經常使用的排序方法, 排序是一個程序員基本功, 所謂排序就是對一組數據,按照某個順序排列的過程。html
排序分兩大類:程序員
l 內部排序編程
(1) 交換式排序法數組
① 冒泡法函數
基本思想:post
案例說明:ui
<?php //簡單的 $arr=array(0,5,-1); //這是一箇中間變量 $temp=0; //咱們要把數組,從小到大 //外層循環 for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-1-$i;$j++){ //說明前面的數比後面的數大,就要交換 if($arr[$j]>$arr[$j+1]){ $temp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$temp; } } } //輸出 print_r($arr); ?>
爲了更好使用排序,咱們將其封裝成一個函數:代碼以下 :spa
<?phpcode
//簡單的
//如今咱們把冒泡法封裝成函數,利用之後使用
function bubbleSort(&$myarr){
//這是一箇中間變量
$temp=0;
//咱們要把數組,從小到大
//外層循環
for($i=0;$i<count($myarr)-1;$i++){
for($j=0;$j<count($myarr)-1-$i;$j++){
//說明前面的數比後面的數大,就要交換
if($myarr[$j]>$myarr[$j+1]){
$temp=$myarr[$j];
$myarr[$j]=$myarr[$j+1];
$myarr[$j+1]=$temp;
}
}
}
echo "<br/>函數中的myarr數組";
print_r($myarr);
}
$arr=array(0,5,-1);
//使用函數去排序
bubbleSort($arr);
//輸出
print_r($arr);
?>
☞ 從上面的案例咱們能夠看出
* 數組默認傳遞的是值,不是地址
② 快速排序法
快速排序法,咱們就介紹了一個思想:
③ 選擇排序法
選擇排序法的案例:
舉例說明:
function selectSort(&$arr){
$temp=0;
for($i=0;$i<count($arr)-1;$i++){
//假設 $i就是最小的數
$minVal=$arr[$i];
//記錄我認爲的最小數的下標
$minIndex=$i;
for($j=$i+1;$j<count($arr);$j++){
//說明咱們認爲的最小值,不是最小
if($minVal>$arr[$j]){
$minVal=$arr[$j];
$minIndex=$j;
}
}
//最後交換
$temp=$arr[$i];
$arr[$i]=$arr[$minIndex];
$arr[$minIndex]=$temp;
}
}
本身分析流程.
④ 插入排序法
排序思想:
//插入排序法(小->大)
function insertSort(&$arr){
//先默認下標爲0 這個數已是有序
for($i=1;$i<count($arr);$i++){
//$insertVal是準備插入的數
$insertVal=$arr[$i];
//準備先和$insertIndex比較
$insertIndex=$i-1;
//若是這個條件知足,說明,咱們尚未找到適當的位置
while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){
//同時把數後移
$arr[$insertIndex+1]=$arr[$insertIndex];
$insertIndex--;
}
//插入(這時就給$insertVal找到適當位置)
$arr[$insertIndex+1]=$insertVal;
}
}
從效率上看.
冒泡法< 選擇排序法 < 插入排序法
快速排序法.[空間和時間]
l 外邊排序
由於數據量大,必須藉助外邊文件來完成.
u 查找
咱們這裏給你們介紹 兩種
① 順序查找
對某個數組,安裝順序,一個一個比較,而後找到你要的數據.
案例:
要求從一個數組 $arr=array(46,90,900,0,-1)中查找一個 數 34,若是查找則輸出該數的下標,若是找不到,則輸出,查無此數
代碼:
//要求從一個數組 $arr=array(46,90,900,0,-1)中查找一個 數 34,若是查找則輸出該數//的下標,若是找不到,則輸出,查無此數
$arr=array(46,90,900,0,-1,-1);
function search(&$arr,$findVal){
$flag=false;
for($i=0;$i<count($arr);$i++){
if($findVal==$arr[$i]){
echo "找到了,下標爲=$i";
$flag=true;
//break;
}
}
if(!$flag){
echo '查詢不到';
}
}
search($arr,-1);
② 二分查找法(必須掌握)
所謂二分查找,它有一個重要的前提, 該數組自己已是一個有序數組.
若是該數組不是有序的,則必須先排序再查找
代碼伺候:
//二分查找函數
function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){
//當 $rightIndex>$leftIndex 說明沒有數
if($rightIndex<$leftIndex){
echo "找不到該數";
return ;
}
//找到中間這個數
$middleIndex=round(($rightIndex+$leftIndex)/2);
//若是大於則,向後面找
if($findVal>$arr[$middleIndex]){
binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);
}
//若是是小於中間這個數,則向前面找
else if($findVal<$arr[$middleIndex]){
binarySearch($arr,$findVal,$leftIndex,$middleIndex-1);
}else{
echo "找到這個數 下標是 $middleIndex";
}
}
u 多維數組-二維數組
二維數組的基本語法:
$arr=array( array(1,2,3), array(5,6,9) );
$arr[0]=array(1,0);
二維數組,地圖 ...
二維數組在內存中存在的形式:
快速入門案例:
請用二維數組,輸出以下圖形
0 0 0 0 0 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0
//定義一個二維數組
$arr=array(
array(0,0,0,0,0,0,1),
array(0, 0, 1, 0 ,0 ,0,5),
array(0 ,2 ,0, 3, 0, 0,90),
array(0,0,0,0,0,0,100));
//遍歷二維數組(行)
for($i=0;$i<count($arr);$i++){
//遍歷每行的數據
for($j=0;$j<count($arr[$i]);$j++){
echo $arr[$i][$j]." ";
}
echo "<br/>";
}
echo "<br/>".$arr[2][3];
1. 打印以下圖型:
*********
*********
*********
*********
*********
*********
2. 打印以下圖型:
*
**
***
****
*****
3. 打印以下圖型:
2. 空心金字塔
3. 空心菱形
定義一個函數
function printTest($n,$name){
}
view.php
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<form action="homework01.php" method="post">
請輸入層數:<input type="text" name="layer"/><br/>
請選擇形狀:
<select name="shape">
<option value="a">矩形</option>
<option value="b">半金字塔</option>
<option value="c">金字塔</option>
<option value="d">金字塔</option>
<option value="e">金字塔</option>
</select><br/>
<input type="submit" value="打印"/>
</form>
</html>
homework01.php
<?php
//死去活來
//$n表示層數
$n=$_REQUEST['layer'];
//"a"->表示矩形 "b"=>一半金子塔 "c"=>完整的金字塔
$shape=$_REQUEST['shape'];
$starNum=5;
//swtich
function printShape($n,$shape,$starNum=5){
switch($shape){
case "a":
for($i=1;$i<=$n;$i++){
for($j=1;$j<=$starNum;$j++){
echo "*";
}
//打完一層後,換行
echo "<br/>";
}
break;
case "b":
for($i=1;$i<=$n;$i++){
for($j=1;$j<=$i;$j++){
echo "*";
}
echo "<br/>";
}
break;
case "c":
break;
}
}
//調用
printShape($n,$shape);
?>
1. 已知手掌遊戲機一臺320元,mp3一臺260元。
公司舉行抽獎大會,公司有18人,一等獎遊戲機,二等獎mp3,
購入5臺遊戲機,13臺mp3。
問總價爲多少,公司實際平均給每人花費了多少錢。(4980,276.6666)
<?php
$gamerPrice=320;
$mp3Price=260;
$gamerNum=5;
$mp3Num=13;
$totalPrice=$gamerPrice*$gamerNum+ $mp3Price* $mp3Num;
$avgPrice= $totalPrice/ 18;
?>
1. 跳水比賽,8個評委打分。運動員的成績是8個成績取掉一個最高分,去掉一個最低分,剩下的6個分數的平均分就是最後得分。使用一維數組實現打分功能。
解題:
<?php
$arr=array(90,23,89,100,2,5,89,44);
//這裏有一個思路,若是隻想知道最低分和最高分是多少,則能夠排序.
//找出給出最低分的裁判
//該函數能夠返回給出最低分的裁判的下標
function findMin($arr){
//假設第一我的就是給出最低分的裁判
$minFen=$arr[0];
$minIndex=0;
for($i=1;$i<count($arr);$i++){
//若是下面條件成立,說明$i 裁判給出的成績更低
if($minFen>$arr[$i]){
$minFe=$arr[$i];
$minIndex=$i;
}
}
return $minIndex;
}
?>
u php面向對象編程
提出一個問題?
張老太養了兩隻貓貓:一隻名字叫小白,今年3歲,白色。還有一隻叫小花,今年100歲,花色。請編寫一個程序,當用戶輸入小貓的名字時,就顯示該貓的名字,年齡,顏色。若是用戶輸入的小貓名錯誤,則顯示 張老太沒有這隻貓貓。
首先咱們用現有的知識來完成這個案例:
<?php
$cat1_name=」小白」;
$cat1_age=3;
$cat1_color=」白色」;
$cat2_name=」小花」;
$cat2_age=100;
$cat2_color=」花色」;
?>
咱們能不能把屬於同一事物的 變量,統一管理?
解決之道->對象
快速體驗案例:
<?php
class Cat{
public $name;
public $age;
public $color;
}
//建立一隻貓
$cat1=new Cat();
$cat1->name="小白";
$cat1->age=3;
$cat1->color="白色";
$cat2=new Cat();
$cat2->name="小花";
$cat2->age=100;
$cat2->color="顏色";
//若是咱們找到一隻貓,只要找到 $cat1, 那麼該變量全部相關的屬性都統統的找到
$findCatName="小花";
if($cat2->name==$findCatName){
echo $cat2->name."||".$cat2->age."||".$cat2->color;
}
?>
咱們這裏說明一下類和對象的關係(細節後面逐步展開)
總結幾句話:
① 類是抽象的,表明一類事物
② 對象是具體,是類的一個具體實例
③ 類是對象的模板, 對象是類的一個個體實例