19. oktober 2004 - 21:29Der er
17 kommentarer og 2 løsninger
Finde 4 yngste personer i array
Hej Eksperter.
Jeg har brug for et par råd til, hvordan jeg ud fra et array med 100 indtastninger (alder på 100 personer) kan finde de 4 mindste tal og udskrive disse.
Jeg har en ide om, at jeg skal oprette et array der kan indeholde de mindste tal, og så tjekker jeg løbende om mod dette array. Men da arrayet gerne skulle sorteres med mindste tal først, så bliver det altså noget omstændigt.
Nogen gode råd? - Gerne så brugervenlige ideer som muligt - er ny i det her :)
Hm, jeg tror faktisk det nemmeste er, at finde det mindste tal først ved ét gennemløb. Herefter ekskluderes det fundne tal, og arrayet gennemløbes igen - sådan bliver jeg ved 4 gange. Det virker da fornuftigt, ikke ? :)
Din metode er ikke dum! Den vil kun gennemløbe array´et 4 gange jo! Hvor .Sort() metoden jo udnytter QuickSort algoritmen, og sorterer hele arrayet! Hvis du ved noget om tidskompleksitet, så er det jo en O(n^2) - hvor din vil være O(4n).
Men, det er selvfølgelig lettere bare at bruge .Sort(), og hvis ikke tid er en kritisk faktor i din applikation, så ville jeg nok bruge den! :-)
arne_v: Ved godt at man ikke skriver den slags faktorer i O(), men syntes bare det gør det lettere at forklare det sådan, men rigtigt.. det hedder bare O(n).
Du ligger sq meget energi i at give et godt svar! - er godt at se!
webcreator: med 2 algoritmer af samme orden, er det ikke ligemeget hvad man laver af operationer på hvert element. så eet gennemløb er ikke nødvendigvis bedre end 4.
Hvis der kun er 100 elementer er Array.Sort OK: static void Main(string[] args) { int[] a = {3,2,1,9,8,7,6,5,4,11,12}; Array.Sort(a); for(int j=0;j<4;j++) Console.WriteLine(a[j]); }
Nu aner jeg minus om C# men da det minder om Java har jeg følgende kode til formålet... skal evt tilrettes med hensyn til syntax.. Laver eksemplet som snakkede vi om der kun var 10 personer.
int[] yngste = {2,1,9,8,7,6,5,4,11,12};
int min, temp; //først sortere vi lige vores array for (int index = 0; index < yngste.length-1; index++) { min = index; for (int scan = index+1; scan < yngste.length; scan++) if (yngste[scan] < numbers[min]) min = scan;
Console.WriteLine("De fire yngste er "]); Console.WriteLine("/n"]); //så finder vi de fire yngste
for (int i = 0; i < 4; i++) {
Console.WriteLine(yngste[i]);
}
Ved så ikke om jeg forstod dit spørgsmål rigtigt hehe men du kan prøve koden... og ved ikke om jeg har brugt Console.Writeline rigtigt.. kender som sagt kun til java;)
hmm tror egentlig jeg har forstået dit spørgsmål rigtigt og så virker min kode dag også
du skal lige huske kroppen til min kode altså
using System;
class MainClass {
og en sidste "}" til sidst..
Hvis din kode skal udskrive navnene på de 4 yngste og ikke alderen kunne du evt. lave en classe hvor der står navn og alder på de forskellige.. så kan man lave et array som kan referere til objekter og dermed lave objekter af den klasse.
fastpoint: Vi har i starten af spørgsmålet lagt fast at sortere et array bare kan gøres ved Array.Sort(), hvorfor begynder du så at lave en måde til at gøre det manuelt? Virker lidt malplaceret. Ligesom petersteph´s gentagelse af andre´s svar.
Som du selv siger... i lagde fast at det kan gøres ved hjælp af Array.Sort(), men nu kender jeg ikke metoden så derfor lagde jeg fast at man bare kunne gøre det manuelt... og hvad er der egentlig galt i det? Synes da det er meget praktisk, at man kan se koden for sig og det lære mig da også mere af...
Synes i hvertfald at din sidste kommentar er af mindre værdi end mine bidrag.
Synes godt om
Ny brugerNybegynder
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.