<?php
$arrStoreList = array(3,2,24,1,5);
$sort = new Merge_sort();
$sort->mergeSort($arrStoreList, function($a,$b) {
return $a<$b;
});
var_dump($arrStoreList);
class Merge_sort{
public function mergeSort(&$array, $cmp_function='strcmp') {
if(count($array)<2) {
return;
}
$halfway = count($array)/2;
$array1 = array_slice($array,0,$halfway);
$array2 = array_slice($array,$halfway);
self::mergeSort($array1,$cmp_function);
self::mergeSort($array2,$cmp_function);
$array= array();
$ptr1 = $ptr2 =0;
while($ptr1<count($array1) && $ptr2<count($array2)) {
if (call_user_func($cmp_function, $array1[$ptr1], $array2[$ptr2])<1) {
$array[] = $array1[$ptr1++];
} else {
$array[] = $array2[$ptr2++];
}
}
while($ptr1<count($array1)) {
$array[] = $array1[$ptr1++];
}
while($ptr2<count($array2)) {
$array[] = $array2[$ptr2++];
}
return;
}
}
?>
$arrStoreList = array(3,2,24,1,5);
$sort = new Merge_sort();
$sort->mergeSort($arrStoreList, function($a,$b) {
return $a<$b;
});
var_dump($arrStoreList);
class Merge_sort{
public function mergeSort(&$array, $cmp_function='strcmp') {
if(count($array)<2) {
return;
}
$halfway = count($array)/2;
$array1 = array_slice($array,0,$halfway);
$array2 = array_slice($array,$halfway);
self::mergeSort($array1,$cmp_function);
self::mergeSort($array2,$cmp_function);
$array= array();
$ptr1 = $ptr2 =0;
while($ptr1<count($array1) && $ptr2<count($array2)) {
if (call_user_func($cmp_function, $array1[$ptr1], $array2[$ptr2])<1) {
$array[] = $array1[$ptr1++];
} else {
$array[] = $array2[$ptr2++];
}
}
while($ptr1<count($array1)) {
$array[] = $array1[$ptr1++];
}
while($ptr2<count($array2)) {
$array[] = $array2[$ptr2++];
}
return;
}
}
?>