Skip to content

Instantly share code, notes, and snippets.

@ackintosh
Last active December 15, 2015 04:38
Show Gist options
  • Save ackintosh/5202576 to your computer and use it in GitHub Desktop.
Save ackintosh/5202576 to your computer and use it in GitHub Desktop.
Mergesort in PHP
<?php
function merge_sort(Array $ar)
{
if (count($ar) <= 1) return $ar;
list($a, $b) = half($ar);
$aa = merge_sort($a);
$bb = merge_sort($b);
return merge($aa, $bb);
}
function half(Array $ar)
{
$mid = floor(count($ar) / 2);
return array(array_slice($ar, 0, $mid), array_slice($ar, $mid));
}
function merge(Array $a, Array $b)
{
$result = array();
while (!(empty($a) && empty($b))) {
switch (true) {
case empty($a):
$result[] = array_shift($b);
break;
case empty($b):
$result[] = array_shift($a);
break;
case $a[0] <= $b[0]:
$result[] = array_shift($a);
break;
default:
$result[] = array_shift($b);
break;
}
}
return $result;
}
$ar = array(4,5,6,2,12,5,9);
var_dump(merge_sort($ar));
/*
array(7) {
[0]=>
int(2)
[1]=>
int(4)
[2]=>
int(5)
[3]=>
int(5)
[4]=>
int(6)
[5]=>
int(9)
[6]=>
int(12)
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment