PHP Quicksort error

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Jasper_S1985
  • Registratie: Februari 2015
  • Laatst online: 03-10 17:50
Mijn vraag

Ik moet een php quicksort algoritme schrijven voor school en uiteraard wil ik dat ook zelf doen in plaats van code te kopieëren. De code hieronder loopt voor het grootste gedeelte goed tot hij bij het recursieve gedeelte komt. Ik weet ook niet of de oplossing die ik werkend probeer te maken wel juist is ( Blijkbaar niet door de errors :p ).

Ik krijg de error "Notice: Undefined offset: -1 in C:\xampp\htdocs\tests\quicksort.php on line 30" en die word oneindig gelooped.
Line 30 voor de duidelijkheid is bij mij
PHP:
1
while($array[$r] >= $pivot) $r--;


De error komt na het plaatsen van de code
PHP:
1
return array_merge(sortArray($array, $left, $l-1),sortArray($array, $l, $right));


De rest van de 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
// Create a array with the variables
    $myArray = array($getal1, $getal2, $getal3, $getal4, $getal5, $getal6);
    $sortedNumbers = sortArray($myArray, 0, sizeof($myArray) -1);
}

function sortArray($array, $left, $right) {
    // Check if the array is 1 or shorter
    if(sizeof($array) <= 1) {
        return $array;
    }

    // Asign necessary variables
    $l = $left;
    $r = $right;
    $pivot = $array[0];

    // Run through the array to look for numbers bigger and smaller than the pivot
    while($r >= $l) {
        while($array[$l] <= $pivot) $l++;
        while($array[$r] >= $pivot) $r--;
        if($l < $r) {
            if($array[$l] > $array[$r]) {
                $temp = $array[$l];
                $array[$l] = $array[$r];
                $array[$r] = $temp;
            }
        }
    }
    
    // Switch the pivot with the $l-1 position
    $x = $array[$l-1];
    $array[$l-1] = $array[$left];
    $array[$left] = $x;
    
    return array_merge(sortArray($array, $left, $l-1),sortArray($array, $l, $right));
}

De getallen uit de array worden uit invoervelden gehaald. Dit leek mij geen relevante code.

Ik zoek dus iemand die me even in de juiste richting wil duwen waar ik op moet letten of naar moet kijken aangezien ik me aardig aan het blindstaren ben op deze code momenteel.
Ik heb het hele proces al met pen en papier zelfs nagelopen maar daar kwam ik helaas ook niet verder mee.

Alvast bedankt als je een tip hebt!

Alle reacties


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Lees eens gewoon goed de foutmelding. Je probeert element met index "-1" uit een array te benaderen. Arrays beginnen toch echt pas bij 0 en niet bij -1 ;) Verder: heb je al gedebugged (Debuggen: Hoe doe ik dat?)? Wat kwam daar uit? Ergens is er dus een variabele die niet de waarde heeft die je verwacht. Kwestie van goed alle variabelen in de smiezen houden en kijken waar 't fout gaat.

[ Voor 57% gewijzigd door RobIII op 21-06-2019 14:59 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Jasper_S1985
  • Registratie: Februari 2015
  • Laatst online: 03-10 17:50
Ik zal me wel eerst eens goed in debugging gaan verdiepen. :) Was gewend aan c# en daar kan je per regel door je code lopen. Geen idee of dat bij php kan maar ik ga het uitzoeken.

Acties:
  • 0 Henk 'm!

  • Groentjuh
  • Registratie: September 2011
  • Laatst online: 04-10 19:39
PHP:
1
// Run through the array to look for numbers bigger and smaller than the pivot

En wat als pivot het grootste/kleinste nummer is?
Jasper_S1985 schreef op vrijdag 21 juni 2019 @ 15:02:
Ik zal me wel eerst eens goed in debugging gaan verdiepen. :) Was gewend aan c# en daar kan je per regel door je code lopen. Geen idee of dat bij php kan maar ik ga het uitzoeken.
Xdebug extension kan daar helpen. Ook Zend Debugger kan dat doen.

[ Voor 55% gewijzigd door Groentjuh op 21-06-2019 15:06 ]