一共苛、冒泡排序
基本思想:
對需要排序的數(shù)組從后往前(逆序)進行多遍的掃描判没,當發(fā)現(xiàn)相鄰的兩個數(shù)值的次序與排序要求的規(guī)則不一致時,就將這兩個數(shù)值進行交換隅茎。這樣比較谐畏濉(大)的數(shù)值就將逐漸從后面向前面移動。
//冒泡排序
<?php
??functionmysort($arr)
??{
????for($i= 0;$i<count($arr);$i++)
????{
??????$isSort= false;
??????for($j=0;$j<count($arr) -$i- 1;$j++)
??????{
????????if($arr[$j] <$arr[$j+1])
????????{
??????????$isSort= true;
??????????$temp=$arr[$j];
??????????$arr[$j] =$arr[$j+1];
??????????$arr[$j+1] =$temp;
????????}
??????}
??????if($isSort)
??????{
????????break;
??????}
????}
????return$arr;
??}
??$arr=array(3,1,2);
??var_dump(mysort($arr));
?>
二辟犀、快速排序
基本思想:
在數(shù)組中挑出一個元素(多為第一個)作為標尺俏竞,掃描一遍數(shù)組將比標尺小的元素排在標尺之前,將所有比標尺大的元素排在標尺之后,通過遞歸將各子序列分別劃分為更小的序列直到所有的序列順序一致魂毁。
//快速排序
<?php
??//快速排序
????functionquick_sort($arr)
????{
??????//先判斷是否需要繼續(xù)進行
??????$length=count($arr);
??????if($length<= 1)
??????{
????????return$arr;
??????}
??????$base_num=$arr[0];//選擇一個標尺 選擇第一個元素
??????//初始化兩個數(shù)組
??????$left_array=array();//小于標尺的
??????$right_array=array();//大于標尺的
??????for($i=1;$i<$length;$i++)
??????{?????//遍歷 除了標尺外的所有元素玻佩,按照大小關(guān)系放入兩個數(shù)組內(nèi)
????????if($base_num>$arr[$i])
????????{
??????????//放入左邊數(shù)組
??????????$left_array[] =$arr[$i];
????????}
????????else
????????{
??????????//放入右邊
??????????$right_array[] =$arr[$i];
????????}
??????}
??????//再分別對 左邊 和 右邊的數(shù)組進行相同的排序處理方式
??????//遞歸調(diào)用這個函數(shù),并記錄結(jié)果
??????$left_array= quick_sort($left_array);
??????$right_array= quick_sort($right_array);
??????//合并左邊 標尺 右邊
??????returnarray_merge($left_array,array($base_num),$right_array);
????}
????$arr=array(3,1,2);
????var_dump(quick_sort($arr));
?>
三、二分查找
基本思想:
假設(shè)數(shù)據(jù)是按升序排序的席楚,對于給定值x咬崔,從序列的中間位置開始比較,如果當前位置值等于x烦秩,則查找成功垮斯;若x小于當前位置值,則在數(shù)列的前半段中查找只祠;若x大于當前位置值則在數(shù)列的后半段中繼續(xù)查找兜蠕,直到找到為止。(數(shù)據(jù)量大的時候使用)
//二分查找
<?php
??//二分查找
??functionbin_search($arr,$low,$high,$k)
??{
????if($low<=$high)
????{
??????$mid=intval(($low+$high)/2);
??????if($arr[$mid] ==$k)
??????{
????????return$mid;
??????}
??????elseif($k<$arr[$mid])
??????{
????????returnbin_search($arr,$low,$mid-1,$k);
??????}
??????else
??????{
????????returnbin_search($arr,$mid+1,$high,$k);
??????}
????}
????return-1;
??}
??$arr=array(1,2,3,4,5,6,7,8,9,10);
??print(bin_search($arr,0,9,3));
?>
四抛寝、順序查找
基本思想:
從數(shù)組的第一個元素開始一個一個向下查找牺氨,如果有和目標一致的元素,查找成功墩剖;如果到最后一個元素仍沒有目標元素,則查找失敗夷狰。
//順序查找
<?php
??//順序查找
??functionseq_search($arr,$n,$k)
??{
????$array[$n] =$k;
????for($i= 0;$i<$n;$i++)
????{
??????if($arr[$i] ==$k)
??????{
????????break;
??????}
????}
????if($i<$n)
????{
??????return$i;
????}
????else
????{
??????return-1;
????}
??}
?>
五岭皂、寫一個函數(shù),能夠遍歷一個文件下的所有文件和子文件夾
<?php?
??functionmy_scandir($dir)
??{
????$files=array();
????if($handle= opendir($dir))
????{
??????while(($file= readdir($handle))!== false)
??????{
????????if($file!='..'&&$file!='.')
????????{
??????????if(is_dir($dir."/".$file))
??????????{
????????????$files[$file]=my_scandir($dir."/".$file);
??????????}
??????????else
??????????{
????????????$files[] =$file;
??????????}
????????}
??????}
??????closedir($handle);
??????return$files;
????}
??}
??var_dump(my_scandir('../'));
?>
六沼头、寫一個函數(shù)爷绘,盡可能高效的從一個標準url中取出文件的擴展名
<?php
??functiongetExt($url)
??{
????$arr=parse_url($url);//parse_url解析一個 URL 并返回一個關(guān)聯(lián)數(shù)組,包含在 URL 中出現(xiàn)的各種組成部分
????//'scheme' => string 'http' (length=4)
????//'host' => string 'www.sina.com.cn' (length=15)
????//'path' => string '/abc/de/fg.php' (length=14)
????//'query' => string 'id=1' (length=4)
????$file=basename($arr['path']);// basename函數(shù)返回路徑中的文件名部分
????$ext=explode('.',$file);
????return$ext[count($ext)-1];
??}
??print(getExt('http://www.sina.com.cn/abc/de/fg.html.php?id=1'));
?>