<?php //簡單的 //如今咱們把冒泡法封裝成函數,利用之後使用 function bubbleSort(&$myarr){ //這是一箇中間變量 $temp=0; //咱們要把數組,從小到大 //外層循環 $flag=false; 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; $flag=true; } } //判斷 if(!$flag){ //已是有序 break; } $flag=false; } echo "<br/>函數中的myarr數組"; print_r($myarr); } //選擇排序法 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; } } //這個是快速排序. function quickSort($left,$right,&$array){ $l=$left; $r=$right; $pivot = $array[($left+$right)/2]; $temp=0; while($l<$r){ while($array[$l]<$pivot) $l++; while($array[$r]>$pivot) $r--; if($l>=$r) break; $temp=$array[$l]; $array[$l]=$array[$r]; $array[$r]=$temp; if($array[$l]==$pivot) --$r; if($array[$r]==$pivot) ++$l; } if($l==$r){ $l++; $r--; } if($left<$r) quickSort($left,$r,$array); if($right>$l) quickSort($l,$right,$array); } $arr=array(0,5,-1); //使用函數去排序 //bubbleSort($arr); //使用選擇排序法 //selectSort($arr); //插入排序法 insertSort($arr); //輸出 print_r($arr); //二分查找函數 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"; } } //search($arr,-1); $arr=array(-2,0,90,900,99990); binarySearch($arr,-2,0,count($arr)-1); echo '<br/>'; //用系統函數排序主要有 sort,asort,ksort $data = array( "file1.txt", "file11.txt", "File2.txt", "FILE12.txt", "file.txt" ); natsort( $data ); //普通的「天然排序」 print_r( $data ); //輸出排序後的結果,數組中包括大小寫,輸出不是正確的排序結果 natcasesort( $data ); //忽略大小寫的「天然排序」 print_r( $data ); //輸出「天然排序」後的結果,正常結果 $data = array( "l"=>"Linux", "a"=>"Apache", "m"=>"MySQL", "p"=>"PHP" ); asort( $data ); //使用asort()函數將數組$data按元素的值升序排序,並保留原有的鍵名和值 print_r( $data ); //輸出:Array ( [a] => Apache [l] => Linux [m] => MySQL [p] => PHP ) arsort( $data ); //使用arsort()函數將數組$data按元素的值降序排序,並保留原有的鍵名和值 print_r( $data ); //輸出:Array ( [p] => PHP [m] => MySQL [l] => Linux [a] => Apache ) rsort( $data ); //使用rsort()函數將數組$data按元素的值降序排序,但原始鍵名被忽略 print_r($data); //輸出:Array ( [0] => PHP [1] => MySQL [2] => Linux [3] => Apache ) function sortByLen( $one, $two ) { //若是兩個參數長度相等返回0,在數組中的位置不變 if ( strlen( $one ) == strlen( $two ) ) return 0; else //第一個參數大於第二個參數返回大於0的數,不然返回小於0的數 return ( strlen( $one ) > strlen( $two ) ) ? 1 : -1; } //使用usort()函數傳入用戶自定義的回調函數進行數組排序 usort( $lamp, "sortByLen" ); print_r( $lamp ); //聲明一個$data數組,模擬了一個行和列數組 $data = array( array("id" => 1, "soft" => "Linux", "rating" => 3), array("id" => 2, "soft" => "Apache", "rating" => 1), array("id" => 3, "soft" => "MySQL", "rating" => 4), array("id" => 4, "soft" => "PHP", "rating" => 2), ); //使用foreach遍歷建立兩個數組$soft和$rating,做爲array_multisort的參數 foreach( $data as $key => $value ) { $soft[$key] = $value["soft"]; //將$data中的每一個數組元素中鍵值爲soft的值造成數組$soft $rating[$key] = $value["rating"]; //將每一個數組元素中鍵值爲rating的值造成數組$rating } array_multisort( $rating, $soft, $data ); //使用array_multisort()函數傳入三個數組進行排序 print_r( $data ); /* 排序順序標誌: ■SORT_ASC - 按照上升順序排序 ■SORT_DESC - 按照降低順序排序 排序類型標誌: ■SORT_REGULAR - 將項目按照一般方法比較 ■SORT_NUMERIC - 將項目按照數值比較 ■SORT_STRING - 將項目按照字符串比較 */ $grade = array("score" => array(70, 95, 70.0, 60, "70"), "name" => array("Zhang San", "Li Si", "Wang Wu", "Zhao Liu", "Liu Qi")); array_multisort($grade["score"], SORT_NUMERIC, SORT_DESC,// 將分數做爲數值,由高到低排序 $grade["name"], SORT_STRING, SORT_ASC);// 將名字做爲字符串,由小到大排序 var_dump($grade); ?>