php 陣列合併 五種常見陣列排序演算法

2021-10-11 18:22:23 字數 2585 閱讀 8991

氣泡排序演算法思路

比較相鄰的兩個陣列元素,如果第乙個比第二個大,則交換兩個的值

對每一對相鄰元素做同樣的工作,從開始第一對比較到最後一對,最後的元素應該是最大值

針對所有元素重複以上步驟,除了最後乙個

針對越來越少的元素重複以上步驟,直至沒有任何一對數字比較

**實現:

<?php 

//氣泡排序

$arr = array(4, 2, 76, 2, 7, 1, 9, 45);

//控制迴圈次數

for ($i = 0; $len = count($arr), $i < $len; $i++)

}}print_r($arr);

選擇排序演算法思路:

假設第乙個元素為最小值,記下其下標

尋找右側剩下的元素,若有更小的,記錄其下標

如果有新的最小值,交換元素

往右重複以上步驟,直至元素是最後乙個

**實現:

<?php 

//選擇排序

$arr = array(2, 6, 34, 2, 67, 33, 9);

//確定交換多少次,一次找到乙個最小值

for ($i = 0; $len = count($arr), $i < $len; $i++)

}//交換當前選定的最小值與實際最小值

if ($min != $i)

}print_r($arr);

插入排序演算法思路:

假設第乙個元素已經排好

取出第二個元素,作為待插入元素

與已經排好序的最右側元素比較

如果後面的元素大於前面的元素,說明前面的元素不在正確的位置上,則往後退乙個位置,然後讓新的元素填充進去,繼續向前比

重複以上步驟,直到元素插入正確位置

重複以上步驟,直至所有元素插入正確位置

**實現:

<?php 

//插入排序

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

//確定插入多少回(假設乙個陣列一次插入到正確位置,同時第乙個位置是對的)

for ($i=1;$len=count($arr),$i

else

}}print_r($arr);

快速排序演算法思路:

假設將第乙個元素作為比較元素

定義兩個陣列($left,$right),然後從第二個元素開始跟比較元素相比,小的放大$left陣列裡,大的放到$right陣列裡

這是中間的元素位置肯定是對的

用遞迴實現$left和$right元素的排序

**實現:

<?php 

//快速排序

$arr = array(2, 0, 1, 7, 3, 5, 6);

function quick_sort($arr)

$left = $right = array();

//取出第乙個元素作為比較元素,剩下的元素比他小放到left,大的放到right

for ($i = 1; $i < $len; $i++) else

}//遞迴排好左右兩個陣列元素

$left = quick_sort($left);

$right = quick_sort($right);

//合併三個陣列

return array_merge($left, (array)$arr[0], $right);

}print_r(quick_sort($arr));

歸併排序演算法思路:

分而治之的思想

將要排序的陣列從中間元素分開成兩個陣列,然後在定義乙個新陣列用來放歸並的元素

把兩個陣列挨個比較,較小的先放進新定義的歸併陣列

直至兩個陣列都比較完,這時有乙個陣列只剩乙個最大的元素,然後將歸併完的陣列與這個元素合併

注意左右兩個陣列遞迴排序內部元素

**實現:

<?php 

$arr = array(4, 7, 2, 1, 5, 9, 3);

function merge_sort($arr)

//拆分

$middle = round($len / 2);

$left = array_slice($arr, 0, $middle);

$right = array_slice($arr, $middle);

//遞迴左右兩個陣列

$left = merge_sort($left);

$right = merge_sort($right);

//兩個陣列裡都有元素才比較

while (count($left) && count($right))

return array_merge($m, $left, $right);

}print_r(merge_sort($arr));

PHP陣列 陣列合併

陣列合併函式 array merge或者 array merge 將乙個或多個陣列的單元合併起來,乙個陣列中的值附加在前乙個陣列的後面。返回作為結果的陣列。如果輸入的陣列中有相同的字串鍵名,則該鍵名後面的值將覆蓋前乙個值。然而,如果陣列包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。如果只...

php陣列合併

php的陣列在這門語言裡使用得非常多。陣列的一些常見操作像split explode,join implode,排序 sort,asort,ksort,arsort 兩陣列合併 array combine 鍵值翻轉 array flip 當然還有比較複雜的陣列合併。陣列合併至少有4種形式。1.第一種...

php中常見陣列函式

1,定位陣列 bool in array mixed needle,array haystack bool strict 查詢指定元素 array array keys arraqy input mixed search value 返回鍵值組成的陣列 bool array key exists m...