Avatar billede azzodiac Nybegynder
16. september 2003 - 09:47 Der er 11 kommentarer og
1 løsning

Sorter array

Hejsa.
Jeg har et array som indeholder Double tal.
Jeg vil gerne sortere indholdet af dette array, så det første element i array'et indeholder det tal som er størst, osv.
Nogen som kan hjælpe?
Avatar billede nmh Nybegynder
16. september 2003 - 10:05 #2
Den bedst måde at sortere på er at benytte CombSort.
Den er næsten lige så hurtig som QuickSort, men er meget simpel.

sub Sort(A)
'Denne procedure sorterer arrayet, som
'overføres ved reference.
'Det er metoden CombSort, der benyttes.
'Den er næsten lige så hurtig som QuickSort
  dim n, gap,OK,i,j,tmp
'tabellen A sorteres. CombSort
  n=Ubound(A)
  gap = n
  ok = True
  While ok
    If gap < 1 Then gap = 1
    ok = (gap <> 1)
    For i = 0 To n - gap
      j = i + gap
      If A(i) > A(j) Then
        tmp = A(j): A(j) = A(i): A(i) = tmp
        ok=true
      End If
    Next
    gap = Int(gap / 1.33) 'Tallet 1.33 er bedst
  Wend
end sub

Hvis du har et array Q, så vil ordren
Sort Q
resultere i, at nu er Q sorteret.
Avatar billede azzodiac Nybegynder
16. september 2003 - 10:11 #3
Det ser godt ud, men ingen af løsningerne virker når det er Double værdier i array'et.
Avatar billede nmh Nybegynder
16. september 2003 - 10:14 #4
Nu ser jeg du ønsker det største element først.
Men så skal du blot ændre linien
If A(i) > A(j) Then
til
If A(i) < A(j) Then
Avatar billede nmh Nybegynder
16. september 2003 - 10:15 #5
hvad mener du med Double-værdier?
Jeg troede du mente tal af typen Dbl
(altså flydende tal med mange cifre)
Avatar billede azzodiac Nybegynder
16. september 2003 - 10:19 #6
det er det jeg mener, sorry :)
Avatar billede nmh Nybegynder
16. september 2003 - 10:20 #7
men er det et aray af typen
1,2
3,4
5,6
hvordan ønsker du det så sorteret?
er 1,2<3,1 og 1,3 er > 1,2
Avatar billede azzodiac Nybegynder
16. september 2003 - 10:20 #8
CombSort virker fint, bortset fra at den sorterer kun det første ciffer. F.eks. kommer 1 før 19.
Avatar billede nmh Nybegynder
16. september 2003 - 10:23 #9
Lad os lige gøre os klart, hvad det er, der skal sorteres.
Giv et konkret eksempel(et array med 5 dobbelte elementer )
Avatar billede eagleeye Praktikant
16. september 2003 - 10:24 #10
Du skal bare sætte CDbl omkring denne if sætning, det for di ComboSort ikke har noget type tjek.:
If A(i) > A(j) Then

Sådan her:

If CDbl(A(i)) > CDbl(A(j)) Then
Avatar billede ldanielsen Nybegynder
16. september 2003 - 13:56 #11
Noget tyder på at dit array indeholder tekst.

Hvordan opretter du det?
Avatar billede azzodiac Nybegynder
16. september 2003 - 15:35 #12
Jeg smed indholdet over  i et 2 dimensionalt array, og brugte eagleeye's første løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel