php排序演算法及二分法查詢

2022-07-10 02:15:09 字數 2943 閱讀 2084

思想:將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。 

要點:設立哨兵,作為臨時儲存和判斷陣列邊界之用。 

function insertsort($arr

)

$j--;}}

return

$arr

;}

思想:先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行依次直接插入排序。 

function shellsort($arr

)

$arr[$j+$step]=$temp

; }

$step=floor($step/2);

}return

$arr

;}

思想:在要排序的一組數中,選出最小(或者最大)的乙個數與第1個位置的數交換;然後在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元素(最後乙個數)比較為止。 

function selectsort($arr

) }

if($min!=$i

) }

return

$arr

;}

思路:在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。 

function bubblesort($arr

) }

}return

$arr

;}

思路: 

1)選擇乙個基準元素,通常選擇第乙個元素或者最後乙個元素, 

2)通過一趟排序講待排序的記錄分割成獨立的兩部分,其中一部分記錄的元素值均比基準元素值小。另一部分記錄的 元素值比基準值大。 

3)此時基準元素在其排好序後的正確位置 

4)然後分別對這兩部分記錄用同樣的方法繼續進行排序,直到整個序列有序。 

function quicksort($arr

)

//選擇第乙個元素作為基準

$base_num = $arr[0];

//遍歷除了標尺外的所有元素,按照大小關係放入兩個陣列內

//初始化兩個陣列

$left_array = array(); //

小於基準的

$right_array = array(); //

大於基準的

for($i=1; $i

else

}//再分別對左邊和右邊的陣列進行相同的排序處理方式遞迴呼叫這個函式

$left_array = quicksort($left_array

);

$right_array = quicksort($right_array

);

//合併

return

array_merge($left_array, array($base_num), $right_array

);}

歸併(merge)排序法是將兩個(或兩個以上)有序表合併成乙個新的有序表,即把待排序序列分為若干個有序的子串行,再把有序的子串行合併為整體有序序列。

/*

** mergesort 歸併排序

* 是開始遞迴函式的乙個驅動函式

* @param &$arr array 待排序的陣列

*/function mergesort(&$arr

) /*

** 實際實現歸併排序的程式

* @param &$arr array 需要排序的陣列

* @param $left int 子串行的左下標值

* @param $right int 子串行的右下標值

*/function msort(&$arr, $left, $right) }

/*** 將兩個有序陣列合併成乙個有序陣列

* @param &$arr, 待排序的所有元素

* @param $left, 排序子陣列a的開始下標

* @param $center, 排序子陣列a與排序子陣列b的中間下標,也就是陣列a的結束下標

* @param $right, 排序子陣列b的結束下標(開始為$center+1)

*/function mergearray(&$arr, $left, $center, $right

) else

}//判斷 陣列a內的元素是否都用完了,沒有的話將其全部插入到c陣列內:

while($a_i

<= $center

)

//判斷 陣列b內的元素是否都用完了,沒有的話將其全部插入到c陣列內:

while($b_i

<= $right)

//將$arrc內排序好的部分,寫入到$arr內:

for($i=0, $len=count($temp); $i

//do some test:

$arr = array(4, 7, 6, 3, 9, 5, 8);

mergesort(

$arr

);print_r($arr);

前提:查詢陣列必須是有序的

function bsearch($v, $arr

) else

if ($arr[$i] < $v

) else

}return -1;//

找不到的時候返回-1

}echo bsearch(13, $arr);//

5

php排序演算法及二分法查詢

思想 將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。思想 先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整...

查詢演算法 二分法

二分查詢演算法的基本思想 一.首先確定該區間的中間元素位置 mid low high 2 mid代表區間內中間元素的位置 low代表區間內最左邊元素的位置 high代表區間內最右邊元素的位置 二.將待查key元素值與中間元素mid的值 array mid 比較,如果相等,則查詢成功,否則確定新的查詢...

演算法 二分法查詢

1 2 二分法實驗 31 設a 0 n 1 是乙個已排好序的陣列.4請改寫二分搜尋演算法,使得當搜尋元素x不在陣列中時,5返回小於x的最大元素的位置i和大於x的最大元素位置j.6當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置.72 設有n個不同的整數排好序後存放於t 0 n 1 中,8若存在...