Avatar billede _et Praktikant
07. august 2004 - 20:30 Der er 14 kommentarer og
1 løsning

Algoritmer - Hvordan?

Jeg syntes at mine programmer kører langsomt når der skal søges eller soteres, og jeg tror at det er fordi jeg gør det "forkert".

Derfor vil jeg gerne lære noget om søge og sorterings algoritmer, og evt. andre typer der kan være aktuelle for en nybegynder.

Alt hvad i mener der er spændende og smart vil jeg gerne se/høre om.
Avatar billede arne_v Ekspert
07. august 2004 - 21:01 #1
søgning:
  søg på "binary search"

sortering:
  søg på "quicksort"

[hvis du ikke lige kan finde det du leder efter så kan jeg godt lave et lille
kode eksempel på dem]

Det vil sjældent kunne betale sig at implementere en sortering selv. Brug
noget af det der kommer indbygget i .NET som f.eks. Array klassens Sort metode.
Avatar billede arne_v Ekspert
07. august 2004 - 21:02 #2
Nogen gange vil en hash table være bedre en en binær søgning.

EN sådan er indbygget i .NET  i form af System.Collections Hashtable klassen.
Avatar billede _et Praktikant
07. august 2004 - 21:09 #3
Hvis du har tiden vil jeg gerne have det eksempel. :-]
Avatar billede _et Praktikant
07. august 2004 - 21:18 #4
Jeg har et program, der gennemsøger en streng, efter en substreng, kan "binary search" bruges til det.
Avatar billede _et Praktikant
07. august 2004 - 21:30 #5
Efter jeg har kigget på binary search kan jeg vist selv svare på ovenstående - Nej
Avatar billede arne_v Ekspert
07. august 2004 - 21:31 #6
Eksempel kommer om 10-20 minutter.

Binary search kræver at det man søger i er sorteret.

Umiddelbart vil jeg tro at IndexOf ville være hurtigst til det.
Avatar billede _et Praktikant
07. august 2004 - 21:31 #7
Tak
Avatar billede arne_v Ekspert
07. august 2004 - 21:56 #8
using System;

public class QS
{
  private static void qsint_help(int n1, int n2, int[] ia) {
      int tmp;
      int l = n1;
      int r = n2;
      int pivot = ia[(n1 + n2) / 2];
      do {
        while (ia[l] < pivot)
            l++;
        while (ia[r] > pivot)
            r--;
        if (l <= r) {
            tmp = ia[l];
            ia[l] = ia[r];
            ia[r] = tmp;
            l++;
            r--;
        }
      }
      while (l <= r);
      if (n1 < r)
        qsint_help(n1, r, ia);
      if (l < n2)
        qsint_help(l, n2, ia);
      return;
  }
  public static void qsint(int[] ia) {
      qsint_help(0, ia.Length - 1, ia);
      return;
  }
}

class MainClass
{
   
    public static void Main(string[] args)
    {
        int[] a1 = { 10, 2, 4, 7, 3, 1, 5, 8, 9, 6 };
        int[] a2 = (int[])a1.Clone();
        int[] a3 = (int[])a1.Clone();
        Array.Sort(a2);
        QS.qsint(a3);
        for(int i = 0; i < a1.Length; i++)
        {
            Console.WriteLine(a1[i] + " " + a2[i] + " " + a3[i]);
        }
    }
}
Avatar billede _et Praktikant
07. august 2004 - 22:00 #9
ps. Hvad er :"Statement" under "Minisite & Statement" er på eksperten?
Avatar billede arne_v Ekspert
07. august 2004 - 22:02 #10
Ved jeg faktisk ikke.

Jeg formoder at det bliver vist på et eller andet skærm billede. Men jeg ved
ikke hvilket.
Avatar billede _et Praktikant
07. august 2004 - 22:11 #11
Statment - Jeg regnede bare med at du måske viste det ( Coadmin ) :-)

Fint eksempel.

Grunden til at du kan kalde qsint() sådan :

QS.qsint(a3);

Er fordi qsint() er "static" - Kan det ikke passe?

Kast lige et svar
Avatar billede arne_v Ekspert
07. august 2004 - 22:13 #12
Jeg er ikke coadmin.

Du kan spørge her:
  http://www.eksperten.dk/spm/Eksperten/
(der er oveniøbet tradition for at give 0 point i den kategori, så det er helt gratis)
Avatar billede arne_v Ekspert
07. august 2004 - 22:13 #13
Ja fordi metoden er static kalder jeg klassens navn og ikke en instans af klassen.
Avatar billede arne_v Ekspert
07. august 2004 - 22:13 #14
svar
Avatar billede _et Praktikant
07. august 2004 - 22:16 #15
Beklager coadmin, jeg syntes bare at jeg havde set det inde under din info, men .?.?

Jeg takker for info og eksempel - forsat god aften.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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