Sorteer algoritme

Pagina: 1
Acties:

Onderwerpen


  • xandie
  • Registratie: November 2010
  • Laatst online: 14-04 22:06
hoi,
Ik ben net begonnen met het leren van wat algoritmes adv Introduction to Algorithms.
Nu zit ik al vast bij het eerste algoritme, Insertion-sort
code:
1
2
3
4
5
6
7
8
9
10
11
12
  Dim Inti, intKey, intteller As Integer
        For intteller = 0 To arrIntGetalen.Length - 1
            intKey = arrIntGetalen(intteller)
            Inti = intteller - 1

  -------> While Inti > 0 And arrIntGetalen(Inti) > intKey
                arrIntGetalen(Inti + 1) = arrIntGetalen(Inti)
                Inti -= 1
                arrIntGetalen(Inti + 1) = intKey
            End While
        Next
        MsgBox("done")

de fout zit bij de pijl; daar zegt visual studio: "Index was outside the bounds of the array."

alvast bedankt voor jullie hulp

  • michiel_hc
  • Registratie: November 2007
  • Laatst online: 00:58
De eerste keer dat de code word doorlopen is Inti -1. Ik gok dat ondanks dat de eerste voorwaarde van de while false is toch de tweede voorwaarde word uitgevoerd. Probeer eens intteller op 1 te laten beginnen?

  • xandie
  • Registratie: November 2010
  • Laatst online: 14-04 22:06
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
Dim Inti, intKey, intteller As Integer
        For intteller = 1 To arrIntGetalen.Length - 1
            intKey = arrIntGetalen(intteller)
            Inti = intteller - 1

           While Inti > 0 And arrIntGetalen(Inti) > intKey
                arrIntGetalen(Inti + 1) = arrIntGetalen(Inti)
                Inti -= 1
                arrIntGetalen(Inti + 1) = intKey
            End While
        Next
        MsgBox("done")

nu sorteert hij het eerste getal niet. :s

  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

eerste run inteller=0
inti word -1

While Inti > 0 And arrIntGetalen(-1) > intKey

arrIntGetalen(-1) => out of bounds


gewoon een laag dieper nesten

[ Voor 11% gewijzigd door Fish op 25-09-2013 19:01 ]

Iperf


Verwijderd

De eerste while lus word overgeslagen omdat IntI dan 0 is.

  • naitsoezn
  • Registratie: December 2002
  • Niet online

naitsoezn

Nait Soez'n!

Iets met (het ontbreken van) Lazy Evaluation... Probeer de 2e conditie eens binnen de eerste conditie. Niet heel nette code, maar het werkt wel. Mogelijk levert een Google op Lazy Evaluation Visual Basic .NET andere oplossingen...

[ Voor 18% gewijzigd door naitsoezn op 25-09-2013 19:04 ]

't Het nog nooit, nog nooit zo donker west, of 't wer altied wel weer licht


  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

Verwijderd schreef op woensdag 25 september 2013 @ 19:01:
De eerste while lus word overgeslagen omdat IntI dan 0 is.
Er word niets overgeslagen

Om de while te evaluren moet hij arrIntGetalen(-1) opzoeken. en die bestaat niet

Iperf


Verwijderd

fish schreef op woensdag 25 september 2013 @ 19:03:
[...]


Er word niets overgeslagen

Om de while te evaluren moet hij arrIntGetalen(-1) opzoeken. en die bestaat niet
xandie heeft de code aangepast (begint nu bij 1) en zegt dat het eerste getal niet gesorteerd wordt.

Edit: hm weet even niet of VB nu ook zero-index arrays heeft, neem aan van wel toch. Dan mis je dus index 0.

[ Voor 14% gewijzigd door Verwijderd op 25-09-2013 19:07 ]


  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

Ja als je 1 hoger begint dan sla je hem zelf over en dan sorteert die natuurlijk niet

het makkelijkt is om de 2e vergelijking niet in de while te stopppen maar een niveau dieper

Iperf


  • xandie
  • Registratie: November 2010
  • Laatst online: 14-04 22:06
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
 Dim Inti, intKey, intteller As Integer
        For intteller = 0 To arrIntGetalen.Length - 1
            intKey = arrIntGetalen(intteller)
            Inti = intteller - 1

            While Inti > 0 AndAlso arrIntGetalen(Inti) > intKey
                arrIntGetalen(Inti + 1) = arrIntGetalen(Inti)
                Inti -= 1
                arrIntGetalen(Inti + 1) = intKey
            End While
        Next
        MsgBox("done")

nu begint intteller terug op 0 en is het probleem met "lazy evalution" opgelost.
maar hij sorteert nog altijd het eerste getal niet. :s

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Dat komt omdat er een klassieke off-by-one error in de code hierboven zit... (En eigenlijk was beginnen bij 1 prima; waarom begin je nu weer bij 0?)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • xandie
  • Registratie: November 2010
  • Laatst online: 14-04 22:06
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
Dim Inti, intKey, intteller As Integer 
        For intteller = 1 To arrIntGetalen.Length - 1 
            intKey = arrIntGetalen(intteller) 
            Inti = intteller - 1 

            While Inti >= 0 AndAlso arrIntGetalen(Inti) > intKey 
                arrIntGetalen(Inti + 1) = arrIntGetalen(Inti) 
                Inti -= 1 
                arrIntGetalen(Inti + 1) = intKey 
            End While 
        Next 
        MsgBox("done")

Gevonden,
Bedankt :D
je kan inderdaad bij 1 beginnen aangezien inti groter moet zijn dan 0
Ik begin steeds meer en meer de schoonheid van programeren in te zien <3

[ Voor 6% gewijzigd door xandie op 25-09-2013 19:42 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
naitsoezn schreef op woensdag 25 september 2013 @ 19:02:
Iets met (het ontbreken van) Lazy Evaluation... Probeer de 2e conditie eens binnen de eerste conditie. Niet heel nette code, maar het werkt wel. Mogelijk levert een Google op Lazy Evaluation Visual Basic .NET andere oplossingen...
Je bedoelt Short-circuit evaluation ;)
Zie ook: Short-Circuiting Logical Operations

[ Voor 11% gewijzigd door RobIII op 25-09-2013 20:26 ]

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

Pagina: 1