【DAY.6】PHP數據結構與算法_排序_歸併排序

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/phpbook/article/details/53232467
概念:歸併排序(MERGE-SORT)是建立在歸併操作上的一種有效的排序算法,該算法是採用分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合併,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。
代碼演示
個人版本
  1. $arr1 = array(2,5,7,8,11,15);
  2. $arr2 = array(1,6,9,10,13,14,15);
  3. function merge_sort($arr1,$arr2){
  4. $len1 = count($arr1);
  5. $len2 = count($arr2);
  6. $key2 = $key1 = 0;
  7. $array = array();
  8. $status = false;
  9. while ($status == false) {
  10. if($key1<$len1 && $key2<$len2){
  11. $array[] = min($arr1[$key1],$arr2[$key2]);
  12. if($arr1[$key1]>$arr2[$key2]){
  13. $key2++;
  14. }else{
  15. $key1++;
  16. }
  17. }else{
  18. $status = true;
  19. if($arr1[$key1]){
  20. $array[] = $arr1[$key1];
  21. }else{
  22. $array[] = $arr2[$key2];
  23. }
  24. }
  25. }
  26. return $array;
  27. }
  28. echo "<pre>";
  29. print_r(merge_sort($arr1,$arr2));
  30. echo "</pre>";

網上參考
  1. /**
  2. * 將兩個有序數組合併成一個有序數組
  3. * @param $arrA,
  4. * @param $arrB,
  5. * @reutrn array合併好的數組
  6. */
  7. function mergeArray($arrA, $arrB) {
  8. $a_i = $b_i = 0;//設置兩個起始位置標記
  9. $a_len = count($arrA);
  10. $b_len = count($arrB);
  11. while($a_i<$a_len && $b_i<$b_len) {
  12. //當數組A和數組B都沒有越界時
  13. if($arrA[$a_i] < $arrB[$b_i]) {
  14. $arrC[] = $arrA[$a_i++];
  15. } else {
  16. $arrC[] = $arrB[$b_i++];
  17. }
  18. }
  19. //判斷 數組A內的元素是否都用完了,沒有的話將其全部插入到C數組內:
  20. while($a_i < $a_len) {
  21. $arrC[] = $arrA[$a_i++];
  22. }
  23. //判斷 數組B內的元素是否都用完了,沒有的話將其全部插入到C數組內:
  24. while($b_i < $b_len) {
  25. $arrC[] = $arrB[$b_i++];
  26. }
  27. return $arrC;
  28. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章