Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Sortering og søk. Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende.

Liknende presentasjoner


Presentasjon om: "Sortering og søk. Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende."— Utskrift av presentasjonen:

1 Sortering og søk

2 Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende for å finne ny plass. Oppdatere filen når ny plass er funnet. Gjenta dette til filen er sortert. 2.Lese alt i filen inn i hukommelsen (anbefales!) 1.Les fra fil og inn i tabell (når programmet starter) 2.Sorter tabellen (her kan en også gjøre andre ting: søking, vedlikehold som legge inn nye, endre eksisterende og slette) 3.Skriv til filen (når programmet avsluttes)

3 Sortering av en tabell Se Forrige gang Se Boken kap 7.4 Sorting and Searching –Bubble Sort (pensum) s 358 Ligner den som ble delt ut på forelesning –Vi fikk det minste elementet øverst –Så gjorde vi det samme med resten av tabellen I boken flytter de det største elementet nederst –Så gjør de det samme med resten av tabellen –Shell Sort (ikke pensum) s 361

4 Sortere biler.txt 1. Les inn i tabell 2. Sorter tabell 3. Skriv tabell ut på biler.txt

5 Les inn tabell i Form_Load Dim tabellMedTellinger() As Integer Private Sub frmTest_Load() Handles MyBase.Load Dim sr As IO.StreamReader Dim nr As Integer sr = IO.File.OpenText("c:\antallBiler.txt") Do While (sr.Peek() <> -1) sr.ReadLine() nr = nr + 1 ’teller antall linjer, linje 0 telles som nr 1 Loop sr.Close() ReDim tabellMedTellinger(nr - 1) 'tabellen starter på 0, må trekke 1 fra antall sr = IO.File.OpenText("c:\antallBiler.txt") For i As Integer = 0 To nr - 1 tabellMedTellinger(i) = CInt(sr.ReadLine) lstTellinger.Items.Add(tabellMedTellinger(i)) Next sr.Close() End Sub

6 Sorter tabell Private Sub btnSorter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSorter.Click For i As Integer = 0 To tabellMedTellinger.GetUpperBound(0) For j As Integer = i To tabellMedTellinger.GetUpperBound(0) If tabellMedTellinger(j) < tabellMedTellinger(i) Then ’minste øverst ByttOm(tabellMedTellinger(i), tabellMedTellinger(j)) End If Next lstTellinger.Items.Clear() For nr As Integer = 0 To tabellMedTellinger.GetUpperBound(0) lstTellinger.Items.Add(tabellMedTellinger(nr)) Next End Sub Sub ByttOm(ByRef x As Integer, ByRef y As Integer) Dim z As Integer z = x x = y y = z End Sub

7 Skriv tabell ut på filen antallbiler-sortert.txt Private Sub() Handles btnSkrivUt.Click Dim sw As IO.StreamWriter sw = IO.File.CreateText("c:\antallBiler-sortert.txt") For nr As Integer = 0 To tabellMedTellinger.GetUpperBound(0) sw.WriteLine(tabellMedTellinger(nr)) Next sw.Close() End Sub

8 Lete etter noe i tabell Searching (365) –Sekvensiell søk –Binærsøk

9 Sekvensell søk ’Finner alle like og skriver dem i listboksen ’ Benyttes for små mengder usorterte data Private Sub btnSok_Click() Handles btnSok.Click lstTellinger.Items.Clear() For nr As Integer = 0 To tabellMedTellinger.GetUpperBound(0) If (tabellMedTellinger(nr) = txtSokEtter.Text) Then lstTellinger.Items.Add("Funnet: " & tabellMedTellinger(nr) & " på plass " & nr) End If Next End Sub

10 Binærsøk (365) 1.Initialiserer forste, siste og merkeFlagg forste = 0, siste = siste element og merkeFlagg=True 2.Se på midten av tabellen, dvs på plass midten = Int( (forste + siste) / 2) 3.Hvis tab(midten) = det vi søker etter: ferdig Sett merkeFlagg til False 4.Hvis det vi søker etter < tab(midten) siste = midten -1 5.Hvis det vi søker etter > tab(middle) forste = midten +1 6.Gjenta inntil merkeFlag = True eller forste <= siste dvs ikke funnet

11 Private Sub btnSokBinar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSokBinar.Click Dim forste, siste, midten As Integer Dim merkeFlagg As Boolean Dim foresporsel As Integer foresporsel = txtSokEtter.Text lstTellinger.Items.Clear() '1. Initialiserer forste, siste og merkeFlagg forste = tabellMedTellinger.GetLowerBound(0) siste = tabellMedTellinger.GetUpperBound(0) merkeFlagg = True Do While (merkeFlagg And forste <= siste) '2 Se på midten av tabellen, dvs på plass: midten = Int((siste + forste) / 2) '3. If tabellMedTellinger(midten) = foresporsel Then merkeFlagg = False lstTellinger.Items.Add("Funnet: " & tabellMedTellinger(midten) & " på plass " & midten) End If '4. det vi søker etter < tab(midten) If foresporsel < tabellMedTellinger(midten) Then siste = midten - 1 End If '5. Hvis det vi søker etter > tab(middle) If foresporsel > tabellMedTellinger(midten) Then forste = midten + 1 End If '6. while-løkke Loop If (forst > sist) Then lstTellinger.Items.Add(”Verdien er ikke i tabellen!") End If End Sub

12 antallBiler.txt

13 antallBiler-sortert.txt


Laste ned ppt "Sortering og søk. Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende."

Liknende presentasjoner


Annonser fra Google