一些常用的演算法 php實現

2021-04-23 22:33:23 字數 3387 閱讀 4497

<?php

$un_sort_array=array();

for($i=0;$i

<20;$i++)

//用於二分查詢

$need_value = end($un_sort_array);

/* 插入排序

【基本思想】:每次將乙個待排序的資料元素,插入到前面已經排好序的數列中的適當位置,使數列依然有序;直到待排序資料元素全部插入完為止。

【示例】: [初始關鍵字] 

[49] 38 65 97 76 13 27 49 

j=2(38) [38 49] 65 97 76 13 27 49 

j=3(65) [38 49 65] 97 76 13 27 49 

j=4(97) [38 49 65 97] 76 13 27 49 

j=5(76) [38 49 65 76 97] 13 27 49 

j=6(13) [13 38 49 65 76 97] 27 49 

j=7(27) [13 27 38 49 65 76 97] 49 

j=8(49) [13 27 38 49 49 65 76 97]

*/function insert($un_sort_array)

$un_sort_array[$j+1]= $value;

}return

$un_sort_array;}/*

【選擇排序(一維陣列)】【基本思想】:每一趟從待排序的資料元素中選出最小(或最大)的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。【示例】: 

[初始關鍵字] [49 38 65 97 76 13 27 49] 

第一趟排序後 13 [38 65 97 76 49 27 49] 

第二趟排序後 13 27 [65 97 76 49 38 49] 

第三趟排序後 13 27 38 [97 76 49 65 49] 

第四趟排序後 13 27 38 49 [49 97 65 76] 

第五趟排序後 13 27 38 49 49 [97 97 76] 

第六趟排序後 13 27 38 49 49 76 [76 97] 

第七趟排序後 13 27 38 49 49 76 76 [ 97] 

最後排序結果 13 27 38 49 49 76 76 97 */

function select_sort($un_sort_array)

}$un_sort_array[$min_index] = $value;

}return

$un_sort_array;

}//select_sort($un_sort_array);

/*【氣泡排序】【基本思想】:兩兩比較待排序資料元素的大小,發現兩個資料元素的次序相反時即進行交換,直到沒有反序的資料元素為止。【排序過程】:設想被排序的陣列r[1..n]垂直豎立,將每個資料元素看作有重量的氣泡,根據輕氣泡不能在重氣泡之下的原則,從下往上掃瞄陣列r,凡掃瞄到違反本原則的輕氣泡,就使其向上"漂浮",如此反覆進行,直至最後任何兩個氣泡都是輕者在上,重者在下為止。*/

function ball_sort($un_sort_array)}}

return

$un_sort_array;

}//print_r(ball_sort($un_sort_array));

/*【快速排序(一維陣列)】【基本思想】:在當前無序區r[1..h]中任取乙個資料元素作為比較的"基準"(不妨記為x),用此基準將當前無序區劃分為左右兩個較小的無序區:r[1..i-1]和r[i 1..h],且左邊的無序子區中資料元素均小於等於基準元素,右邊的無序子區中資料元素均大於等於基準元素,而基準x則位於最終排序的位置上,即r[1..i-1]≤x.key≤r[i 1..h](1≤i≤h),當r[1..i-1]和r[i 1..h]均非空時,分別對它們進行上述的劃分過程,直至所有無序子區中的資料元素均已排序為止。

【示例】:

初始關鍵字 [49 38 65 97 76 13 27 49]

第一次交換後 [27 38 65 97 76 13 49 49] 

第二次交換後 [27 38 49 97 76 13 65 49] 

j向左掃瞄,位置不變,第三次交換後 [27 38 13 97 76 49 65 49] 

i向右掃瞄,位置不變,第四次交換後 [27 38 13 49 76 97 65 49] 

j向左掃瞄 [27 38 13 49 76 97 65 49](一次劃分過程)

初始關鍵字 [49 38 65 97 76 13 27 49]一趟排序之後 [27 38 13] 49 [76 97 65 49] 

二趟排序之後 [13] 27 [38] 49 [49 65]76 [97]

三趟排序之後 13 27 38 49 49 [65]76 97 

最後的排序結果 13 27 38 49 49 65 76 97 各趟排序之後的狀態 */

//$start 為開始索引,$end為結束索引

function quick_sort($un_sort_array,$start,$end)

$un_sort_array[$start] = $un_sort_array[$j];

$un_sort_array[$j] = $value;

if( ($j-1-$start) >0)

quick_sort($un_sort_array,$start,$j-1);

if( ($end-$j-1) >0 )

quick_sort($un_sort_array,$j+1,$end);

}quick_sort($un_sort_array,0,19);

//print_r($un_sort_array);

//利用一維陣列 遞迴二分查詢法

//將陣列$un_sort_array排序後,為公升序

function binary_seach($un_sort_array,$start,$end,$need_value)

if($need_value>$un_sort_array[$mid])

else

if($need_value

<$un_sort_array[$mid])

else

}//var_dump(binary_seach($un_sort_array,0,19,$need_value));

//二分查詢(遞迴消除)

function binary_seach_clean($un_sort_array,$start,$end, $need_value)

else } 

return false; 

} var_dump(binary_seach_clean($un_sort_array,0,19,$need_value));

最近辭職了 準備早點回家過年,待著實在無聊 就寫了一些原來資料結構的演算法的應用。

一些常用演算法實現

cstring newguid cstring getdatestr2 ctime t 獲取當前日期的字串 cstring getdatestr 判斷是否數字,這裡指不包含負號的數字 int isnum const cstring str if ch 0 ch 9 數字 continue retur...

常用的一些排序演算法(C 實現)

常用的排序演算法有氣泡排序,選擇排序,插入排序,歸併排序 希爾排序,堆排序等 1 冒泡 氣泡排序就是像旗袍一樣,最大的值逐漸上浮,我的實現方法是採用遞迴的,當然也可以不用遞迴 void bubblesort2 int array,int length if index length 1 bubble...

一些常用的php函式

這是一些使用頻率比較高的函式,有的來自別人的程式.1.產生隨機字串函式 function random length return hash 2.擷取一定長度的字串 注 該函式對gb2312使用有效 function wordscut string,length sss 0 for i 0 i le...