/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Bubblesort-kode skiller ikke mellom korte ~
Fra : Terje


Dato : 18-05-02 13:00

Jeg prøver å sortere to arrays ved hjelp av Bubblesort, men har problemer
når tallene har ulik lengde. Alle de kodeeksemplene jeg har funnet greier
ikke å sortere f. eks. tallene 102345a mot 566b riktig. fordi 1 eer mindre
enn 5 så erklæres det første tallet som minst. Jeg prøver å legge inn kode
som også sjekker på tallenes lengde med Len-funksjonen, men har visst gått
meg fullstendig vill. Her er koden jeg arbeider med, den er foreløpig i
vbscript/asp, men skal konverteres til vb seinere. Er takknemlig for all
hjelp.


Function SorterArray(arrArray)
' http://www.4guysfromrolla.com/demos/bubblesort.asp
Dim row, j
Dim StartingKeyValue, NewKeyValue, swap_pos, aTempArray
aTempArray = ""

For row = 0 To UBound(arrArray)

StartingKeyValue = arrArray(row)
NewKeyValue = arrArray(row)
swap_pos = row

For j = row + 1 to UBound(arrArray)
If arrArray(j) < NewKeyValue Then
swap_pos = j
NewKeyValue = arrArray(j)
End If
Next

If swap_pos <> row Then
'If Len(arrArray(row)) >= Len(arrArray(swap_pos)) Then 'HER ER MITT
RINGE FORSØK PÅ Å SJEKKE MOT TALLENES LENGDE
arrArray(swap_pos) = StartingKeyValue
arrArray(row) = NewKeyValue
'End If
End If

aTempArray = aTempArray & arrArray(row) & ","

Next

SorterArray = aTempArray
End Function



 
 
Carsten Jessen (18-05-2002)
Kommentar
Fra : Carsten Jessen


Dato : 18-05-02 18:00

Hej Terje
Prøv at kigge her:
http://www.vb-helper.com/tut1.htm
Jeg ved ikke om det hjælpe men der finder du en bubblesort (og andre) sub.

Mvh Carsten

"Terje" <ILOVESPAMnidaros2001@hotmail.com> wrote in message
news:ac5fmt$mom9c$1@ID-88092.news.dfncis.de...
> Jeg prøver å sortere to arrays ved hjelp av Bubblesort, men har problemer
> når tallene har ulik lengde. Alle de kodeeksemplene jeg har funnet greier
> ikke å sortere f. eks. tallene 102345a mot 566b riktig. fordi 1 eer
mindre
> enn 5 så erklæres det første tallet som minst. Jeg prøver å legge inn kode
> som også sjekker på tallenes lengde med Len-funksjonen, men har visst gått
> meg fullstendig vill. Her er koden jeg arbeider med, den er foreløpig i
> vbscript/asp, men skal konverteres til vb seinere. Er takknemlig for all
> hjelp.
>
>
> Function SorterArray(arrArray)
> ' http://www.4guysfromrolla.com/demos/bubblesort.asp
> Dim row, j
> Dim StartingKeyValue, NewKeyValue, swap_pos, aTempArray
> aTempArray = ""
>
> For row = 0 To UBound(arrArray)
>
> StartingKeyValue = arrArray(row)
> NewKeyValue = arrArray(row)
> swap_pos = row
>
> For j = row + 1 to UBound(arrArray)
> If arrArray(j) < NewKeyValue Then
> swap_pos = j
> NewKeyValue = arrArray(j)
> End If
> Next
>
> If swap_pos <> row Then
> 'If Len(arrArray(row)) >= Len(arrArray(swap_pos)) Then 'HER ER MITT
> RINGE FORSØK PÅ Å SJEKKE MOT TALLENES LENGDE
> arrArray(swap_pos) = StartingKeyValue
> arrArray(row) = NewKeyValue
> 'End If
> End If
>
> aTempArray = aTempArray & arrArray(row) & ","
>
> Next
>
> SorterArray = aTempArray
> End Function
>
>
>



Terje (18-05-2002)
Kommentar
Fra : Terje


Dato : 18-05-02 21:02

Takk for svar Carsten.
Det virker som om denne BubbelSort-koden er den samme som går igjen alle
steder på nettet og jeg får den ikke til å virke. Nå har jeg alternativt
prøvd meg på en annen algoritme, nemlig QuickSort som skal være best ved
større datamengder. Men heller ikke den kan sortere 999 før 1000. Jeg har
stirret meg fullstendig blind på denne koden. Må la den ligge litt før jeg
arbeider videre.
terje

"Carsten Jessen" <c.je@get2net.dkREMOVETHIS> wrote in message
news:vMvF8.4014$FV.367681556@news.orangenet.dk...
| Hej Terje
| Prøv at kigge her:
| http://www.vb-helper.com/tut1.htm
| Jeg ved ikke om det hjælpe men der finder du en bubblesort (og andre) sub.
|
| Mvh Carsten




Rayman (21-05-2002)
Kommentar
Fra : Rayman


Dato : 21-05-02 13:36

Hej Terje.
Dir problem er at der sorteres alafabetisk, ikke nummerisk. Dvs. at der
sorteres efter tegnets ascii(unicode) værdi. Altså tegn for tegn, og derfor
sorterer den faktisk rigtigt, det du skal gøre er at vide hvor i strengen
tallet ligger (jeg går ud fra at det er blandet tekst/tal strenge du har),
og så lave en val (eller CLng) og hive værdien ud, og herefter sammenligne
de to tal med hinanden i stedet for at sammenligne tegn som nu. Det er lidt
svært da, du så kommer til at rode med blandede længder, men det finder du
nok ud af. Held og lykke.

Mvh. Rayman

"Terje" <ILOVESPAMnidaros2001@hotmail.com> wrote in message
news:ac6bv8$n92th$1@ID-88092.news.dfncis.de...
> Takk for svar Carsten.
> Det virker som om denne BubbelSort-koden er den samme som går igjen alle
> steder på nettet og jeg får den ikke til å virke. Nå har jeg alternativt
> prøvd meg på en annen algoritme, nemlig QuickSort som skal være best ved
> større datamengder. Men heller ikke den kan sortere 999 før 1000. Jeg har
> stirret meg fullstendig blind på denne koden. Må la den ligge litt før jeg
> arbeider videre.
> terje
>
> "Carsten Jessen" <c.je@get2net.dkREMOVETHIS> wrote in message
> news:vMvF8.4014$FV.367681556@news.orangenet.dk...
> | Hej Terje
> | Prøv at kigge her:
> | http://www.vb-helper.com/tut1.htm
> | Jeg ved ikke om det hjælpe men der finder du en bubblesort (og andre)
sub.
> |
> | Mvh Carsten
>
>
>



Terje (21-05-2002)
Kommentar
Fra : Terje


Dato : 21-05-02 21:13

Takk for svar Rayman.

| Dir problem er at der sorteres alafabetisk, ikke nummerisk. Dvs. at der
| sorteres efter tegnets ascii(unicode) værdi. Altså tegn for tegn, og
derfor
| sorterer den faktisk rigtigt, det du skal gøre er at vide hvor i strengen
| tallet ligger (jeg går ud fra at det er blandet tekst/tal strenge du har),
| og så lave en val (eller CLng) og hive værdien ud, og herefter sammenligne
| de to tal med hinanden i stedet for at sammenligne tegn som nu. Det er
lidt
| svært da, du så kommer til at rode med blandede længder, men det finder du
| nok ud af. Held og lykke.


Hvis man går til f. eks. http://www.4guysfromrolla.com/demos/bubblesort.asp
og skriver inn følgende:
98 99 100 101
så blir resultatet 100, 101, 98, 99. Det må åpenbart være fordi koden
sammenligner det første enkelttall og ganske enkelt konkluderer med at 0 < 1
og 1 < 9. Men det var vel ikke meningen?

terje



Tomas Christiansen (21-05-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 21-05-02 21:51

Terje skrev:
> Hvis man går til f. eks.
http://www.4guysfromrolla.com/demos/bubblesort.asp
....
>Det må åpenbart være fordi koden sammenligner det første enkelttall
>og ganske enkelt konkluderer med at 0 < 1
> og 1 < 9. Men det var vel ikke meningen?

Læg mærke til at der i teksten på siden står:
"Enter a number of strings, each separated by a space"

Deres bubblesort er IKKE beregnet på numeriske værdier.

Hvis man ønsker at sortere strenge som om de var numeriske værdier, er
det letteste nok at sørge for at prefikse med nuller, så der altid er
samme antal cifre i hver tal-streng og evt. suffikse med mellemrum,
hvor der kunne være et bogstav.

Eksempel:
Forkert: "99a", "98c", "100", "101b", "9000"
Rigtigt: "0099a", "0098c", "0100 ", "0101b", "9000 "

-------
Tomas




Terje (22-05-2002)
Kommentar
Fra : Terje


Dato : 22-05-02 02:01

Ok, det begynner å demre for meg. Jeg ble kanskje litt distrahert av at
artikkelen benytter tall i sine eksempler..


| Hvis man ønsker at sortere strenge som om de var numeriske værdier, er
| det letteste nok at sørge for at prefikse med nuller, så der altid er
| samme antal cifre i hver tal-streng og evt. suffikse med mellemrum,
| hvor der kunne være et bogstav.
|
| Eksempel:
| Forkert: "99a", "98c", "100", "101b", "9000"
| Rigtigt: "0099a", "0098c", "0100 ", "0101b", "9000 "


God ide.
Takk for hjelpen.

terje



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste