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.
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
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.
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.
07. august 2004 - 21:09
#3
Hvis du har tiden vil jeg gerne have det eksempel. :-]
07. august 2004 - 21:18
#4
Jeg har et program, der gennemsøger en streng, efter en substreng, kan "binary search" bruges til det.
07. august 2004 - 21:30
#5
Efter jeg har kigget på binary search kan jeg vist selv svare på ovenstående - Nej
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.
07. august 2004 - 21:31
#7
Tak
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]); } } }
07. august 2004 - 22:00
#9
ps. Hvad er :"Statement" under "Minisite & Statement" er på eksperten?
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.
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
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)
07. august 2004 - 22:13
#13
Ja fordi metoden er static kalder jeg klassens navn og ikke en instans af klassen.
07. august 2004 - 22:13
#14
svar
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.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.