16. februar 2003 - 01:08Der er
6 kommentarer og 1 løsning
sort array
Hejsa
Jeg skal sortere et array:
type TUserListe=array[1..3,1..50000] of String; var Users: TUserListe;
Array er bygget op med text i [1,y] et tal i [2,y] og tekst i [3,y]
Jeg skal sortere mit array med det største tal øverst i Users. (flere tal kan have samme værdi)
Jeg har tænkt lidt på det her... men der er 2 probler.. 1) det virker ikke 2) den duer ikke da flere tal har samme værdi:
function SortUsers (): Boolean; var i: integer; temp1: string; temp2: string; temp3: string; flytcount: integer; begin flytcount := UserNumber; repeat for i:=1 to UserNumber do begin if Users[2,i] <= Users[2,i+1] then begin temp1 := Users[1,i]; temp2 := Users[2,i]; temp3 := Users[3,i]; Users[1,i] := Users[1,i+1]; Users[2,i] := Users[2,i+1]; Users[3,i] := Users[3,i+1]; Users[1,i+1] := temp1; Users[2,i+1] := temp1; Users[3,i+1] := temp1; end else flytcount := flytcount -1; end; until flytcount = 0; //hvis den er nul, så blev der ikke flyttet nogen.. og så står alle rigtigt. Result := true; end;
Hvis du vil bruge en bobble-sortering, så skriv korrekt af. Du får problemer med at sortere talværdierne - de vil, som du skriver det, blive sorteret alfabetisk. Du bør bruge et array op til 50.000, hvo hvert element er en passende record (eller evt. objekt)
Lad være med at bruge bubblesort. Algoritmen har kun teoretisk interesse, da køretiden i worst case er proportional med n!, hvor n er antallet af elementer i dit array.
Den mest kendte og meget effektive løsning hedder QuickSort, er er ikke svær at implementere. Du vil kunne finde Psqudo kode i (næsten) enhver lærebog - ellers kan du finde det på google.
Din kode vil blive mere effektiv og dynamisk (når der skal indsættes et element), hvis du implementerer dit array som en hægtet liste af objekter eller records, dvs. i stedet for at skifte alle værdier, skal du kun bytte rundt på 4 pointere. Hver record vil naturligvis fylde 8 byte mere (4 byte for hver pointer). Men vent med dette til du har fået styr på en ordentlig sorterings algoritme.
Umiddelbart kan jeg se 1 fejl i dit program: Du tester med <= hvilket betyder, at hvis der er 2 ens tal, så vil du blive ed med at bytte dem om, og din algoritme når aldrig videre (skal naturligvis teste med <).
qilanto> Det er MEGET uvelset, at tage sin egne points når du har fået et svar tilbudt. Husk på, at der sidder mennekser som hjælper 100% frivilligt, kun for at opnå "points". Hvis du ikke forstå ret svar, må du bede om at få den del du ikke forstå uddybet. At ændre "<=" til "<" kan vel ikke være så svært at forstå??!
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.