Merge sort functie werkt niet
ik heb hier een stukje code geschreven voor de functie merge sort, maar het resultaat wordt niet geprint. Wat doe ik fout?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
echo "De gesorteerde reeks:";
$sorteerArray=array(12,9,3,16);
$returnArray;
merge_sort($sorteerArray);
function merge_sort(&$sorteerArray)
{
if (sizeof($sorteerArray) <= 1)
return $sorteerArray;
// Verdeel de array in 2 helften
// links
$linkerHelft = array_slice($sorteerArray, 0, (int)(count($sorteerArray)/2));
// rechts
$rechterHelft = array_slice($sorteerArray, (int)(count($sorteerArray)/2));
// Splits de 2 gepsplitste helften weer
$linkerHelft = merge_sort($linkerHelft);
$rechterHelft = merge_sort($rechterHelft);
$returnArray = merge($linkerHelft, $rechterHelft);
return $returnArray;
}
function merge(&$links, &$rechts)
{
$result = array();
// terwijl beide arrays iets bevatten, doe...
while (count($links)>0 && count($rechts)>0) {
if ($links[0] <= $rechts[0]) {
array_push($result, array_shift($links));
}
else {
array_push($result, array_shift($rechts));
}
}
return $result;
}
print_r ($returnArray);
?>
echo "De gesorteerde reeks:";
$sorteerArray=array(12,9,3,16);
$returnArray;
merge_sort($sorteerArray);
function merge_sort(&$sorteerArray)
{
if (sizeof($sorteerArray) <= 1)
return $sorteerArray;
// Verdeel de array in 2 helften
// links
$linkerHelft = array_slice($sorteerArray, 0, (int)(count($sorteerArray)/2));
// rechts
$rechterHelft = array_slice($sorteerArray, (int)(count($sorteerArray)/2));
// Splits de 2 gepsplitste helften weer
$linkerHelft = merge_sort($linkerHelft);
$rechterHelft = merge_sort($rechterHelft);
$returnArray = merge($linkerHelft, $rechterHelft);
return $returnArray;
}
function merge(&$links, &$rechts)
{
$result = array();
// terwijl beide arrays iets bevatten, doe...
while (count($links)>0 && count($rechts)>0) {
if ($links[0] <= $rechts[0]) {
array_push($result, array_shift($links));
}
else {
array_push($result, array_shift($rechts));
}
}
return $result;
}
print_r ($returnArray);
?>
Je moet iets doen met de return van merge_sort.
Misschien helpt dit.
----
Zeg, wat doet die functie precies? Mergen van dubbele items of zo ?
Gewijzigd op 22/11/2012 09:22:01 door Kris Peeters
Mergesort is een bekend algoritme, ik heb geprobeerd deze in PHP te laten functioneren. De functie zou de getallen in de array moeten sorteren door middel van eerst de hele reeks op te splitsen totdat de getallen 1 element zijn en ze vervolgens weer samen te voegen tot 1 gesorteerde reeks.
Ik heb inmiddels mijn hele code aangepast maar je reactie heeft desalniettemin geholpen. Thanks!