php常用算法(冒泡排序荚孵,快速排序,二分查找纬朝,順序查找收叶,遍歷所有文件和子文件夾,取出url擴展名)

一共苛、冒泡排序

基本思想:

對需要排序的數(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'));


?>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末墅拭,一起剝皮案震驚了整個濱河市薇宠,隨后出現(xiàn)的幾起案子谈飒,更是在濱河造成了極大的恐慌,老刑警劉巖陶因,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異垂蜗,居然都是意外死亡楷扬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門贴见,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烘苹,“玉大人,你說我怎么就攤上這事片部×秃猓” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長廊鸥。 經(jīng)常有香客問我望浩,道長,這世上最難降的妖魔是什么黍图? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任曾雕,我火速辦了婚禮,結(jié)果婚禮上助被,老公的妹妹穿的比我還像新娘剖张。我一直安慰自己,他們只是感情好揩环,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布搔弄。 她就那樣靜靜地躺著,像睡著了一般丰滑。 火紅的嫁衣襯著肌膚如雪顾犹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天褒墨,我揣著相機與錄音炫刷,去河邊找鬼。 笑死郁妈,一個胖子當著我的面吹牛浑玛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播噩咪,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼顾彰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胃碾?” 一聲冷哼從身側(cè)響起涨享,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仆百,沒想到半個月后厕隧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡俄周,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年栏账,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栈源。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡挡爵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甚垦,到底是詐尸還是另有隱情茶鹃,我是刑警寧澤涣雕,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站闭翩,受9級特大地震影響挣郭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疗韵,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一兑障、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蕉汪,春花似錦流译、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驹马,卻和暖如春革砸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背糯累。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工算利, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泳姐。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓笔时,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仗岸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容