Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.

Slides:



Advertisements
Liknende presentasjoner
GoOnline XP publisering Hvordan komme i gang med GoOnline XP. Denne presentasjonen tar deg steg for steg gjennom oppsett av nettsted med bruk av GoOnline.
Advertisements

Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Tabeller av objekter Klassen ArrayList
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Webprogrammering Arrays.
Uke 8 - Mer om: Objekter, klasser og pekere
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Kap.8 Sortering og søking sist oppdatert • Del 1 Søking - lineær søking m/u sorterte elementer - binærsøking - analyse • Del 2 Sortering - ”gamle”
Algoritmer for søk og sortering Førsteamanuensis Alf Inge Wang
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Tabeller – Arrays Lage frekvenstabell Norske Bokstaver
Ulike sorteringsmetoder Kompleksitet av dem
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
Eiendomregister mars 2002 Arne Maus. import java.util.*; import inf101.*; /* Klasse med main() som starter hele programmet */ class EiendomsregisterMain.
@ TDT4120 Algoritmer og datastrukturer Introduksjon til øvingsopplegg og programmering i Python Åsmund Eldhuset asmunde stud.ntnu.no.
Åsmund Eldhuset asmunde stud.ntnu.no folk.ntnu.no/asmunde/algdat/
En gang til!? .
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Mer om programmering av aggregeringer Repetisjon: Komposisjon og aggregering En register-klasse: modellering En register-klasse: implementering Sortering.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
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.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Objektorientert programmering
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO.
Java 3 Mer om uttrykk Terminal I/O Forgreninger
Java 11 Programmering med og uten objekter: hva er forskjellen?
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Föreläsning 13 Programmeringsteknik och Matlab 2D1312/2D1305 Inläsning från fil Skriva till fil StringTokenizer Sortering.
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
INF1000 (Uke 13) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Ortering Mål: Se på forskjellige måter for sortering.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
INF1000 (Uke 12) Sortering og eksamensoppgaver Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Inf1000 (Uke 10) HashMap og ArrayList
INF1000 (Uke 4) Mer om forgreninger, While-løkker
XML og JDOM Helge Furuseth XML  XML = Extensible Markup Language Basert på SGML – Standard Generalized Markup Language  HTML =
Inf1000 (Uke 5) Arrayer, filer og tekst
Finne feil - Debugging Introduksjon til sortering.
Kapittel 7 Array (lister og tabellar). 7.1 Arrayelement Array (lister, tabellar) er kjent frå VB Blir brukt til å organisere data når vi har mange dataelement.
Iterator i Java boolean hasNext() E next() void remove()
TDT4105 Informasjonsteknologi, grunnkurs
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO

2 Oversikt - sorteringseksempelet  Lære å løse et vanskelig problem  Sortering – mange metoder, her Innstikksortering  Sortere hva:  Heltall  Tekster  En tabell (2-dim) etter verdiene i første kolonne  Eks : telefonkatalogen (sortert på navn)  Lære abstraksjon  Når vi har løst ett problem, kan lignende problemer løses tilsvarende  Lære å lage ’proff’ programvare ved å lage en generell klasse (en vektøyboks) for sortering  Hvordan deklarere en slik klasse  Javadoc – lage dokumentasjon  Testing  Hvordan utvikle programmet

3 Sortering -  Mange datatyper kan sorteres  Tall  Tekster (leksikografisk =i samme rekkefølge de ville stått i et leksikon)  Tabeller av tekster eller tall  Vi må ha en algoritme (fremgangsmåte) for sortering  Det finns mange titalls (hundretalls) metoder for sortering  Dere skal lær den som er raskest når vi skal sortere få elemeter, si < 50 elementer

4 Hvorfor sorterer vi  For å få noen tall i sortert rekkefølge  eks: lotto-tallene  Sortere tekster (navnelister)  Sortere noen opplysninger som hører sammen. Sorterer da på en av opplysningene.  Eks. Telefonkatalogen: navn, adresse, telefonnummer sortert på navn

5  Dette skal vi så med minimale endringer bruke til å sortere:  String-arrayer (tekster)  Sammenhengende opplysninger i en 2-dim array av tekster (hver linje er opplysninger om ett objekt)  Eks : Telefonkatalogen Vi skal først lære å sortere heltall navn adr. postnr. tlf.

6 public class ISort { public static void sorter(int [] a) { } public static void sorter(String [] a) { } public static void sorterEtterKol1(String [] [] a) { } } // end class ISort Vi ønsker en klasse med tre varianter av sortering: Heltall, tekster og 2dim tekst-array (sortert på 1. kol)

class InnstikkSortering { public static void main ( String[] args) { int [] a = {3,1,7,14,2,156,77}; String [] navn = {"Ola", "Kari", "Arne", "Jo"}; String [][] telefonliste = { {"Per"," "}, {"Arne"," "}, {"Kari"," "}, {"Jo"," "}}; // sorter heltall - skriv ut ISort.sorter(a); for (int i = 0; i < a.length; i++) System.out.println("b[" + i +"]= " + a[i]); System.out.println("\n Test tekst-sortering:"); // sorter Stringer - skriv ut ISort.sorter(navn); for (int i = 0; i < navn.length; i++) System.out.println("navn[" + i +"]= " + navn[i]); System.out.println("\n Test 2dim tekst-sortering:"); // sorter Tabell - skriv ut ISort.sorterEtterKol1(telefonliste); for (int i = 0; i < navn.length; i++) System.out.println("navn[" + i +"]= " + telefonliste[i][0] + ", med tlf.: " + telefonliste[i][1] ); }} Test-program for sortering

a "Ola” "Kari” "Arne” "Jo" a a "Jo” ” ” "Per” " " "Arne” " " "Kari” " " Pekere for alle radene Pekere for hvert element i rad nr. 3 heltalls-array en-dimensjonal String-array to-dimensjonal String-array

>java InnstikkSortering b[0]= 3 b[1]= 1 b[2]= 7 b[3]= 14 b[4]= 2 b[5]= 156 b[6]= 77 Test tekst-sortering: navn[0]= Ola navn[1]= Kari navn[2]= Arne navn[3]= Jo Test 2dim tekst-sortering: telefonliste[0]= Per, med tlf.: telefonliste[1]= Arne, med tlf.: telefonliste[2]= Kari, med tlf.: telefonliste[3]= Jo, med tlf.: Test av test-programmet med tomme sortering-metoder

10 En algoritme for å sortere heltall – innstikksmetoden  Se på arrayen ett for ett element fra venstre  Sorterer det vi hittil har sett på ved :  Hvis det nye elementet vi ser på ikke er sortert i forhold til de vi allerede har sett på:  Ta ut dette elementet (gjem verdien i en variabel t )  Skyv på de andre elementene vi her sett på en-etter-en, ett hakk høyreover til elemetet i t kan settes ned på sortert plass.  Da er den delen vi har sortert ett element til lenger (fra venstre)  Når vi har sett på alle elementene, er hele arrayen sortert  Observasjon : Det første elementet, er det sortert i forhold til seg selv a a

a t1 steg a t1 steg a t1 steg 33 Sorter 1 på plass i forhold til 3

a steg a steg 53 steg 6 steg 7 steg a 3 t a 3 t2 flytt: 3,7,14 ett hakk til høyre a 2 t2 7 og 14 står riktig, Sorter 2 på plass i forhold til : 1,3,7,14

// a[k +1 ] står muligens på // feil plass, ta den ut int t = a[k + 1], i = k; // skyv a[i] mot høyre ett hakk til // vi finner riktig plass til t while (i >= 0 && a[i] > t) { a[i + 1] = a[i]; i--; } // sett t inn på riktig plass a[i + 1] = t; a 3 t 2 a t a 2 t 2 k+1 i i Kode for å flytte ett element på plass :

public class ISort { public static void sorter(int [] a) { for (int k = 0 ; k < a.length-1; k++) { // a[k +1 ] står muligens på feil plass, ta den ut int t = a[k + 1], i = k; // skyv a[i] mot høyre ett hakk til // vi finner riktig plass til t while (i >= 0 && a[i] > t) { a[i + 1] = a[i]; i--; } // sett t inn på riktig plass a[i + 1] = t; } } // end heltall-sortering

>java InnstikkSortering b[0]= 1 b[1]= 2 b[2]= 3 b[3]= 7 b[4]= 14 b[5]= 77 b[6]= 156 Test tekst-sortering: navn[0]= Ola navn[1]= Kari navn[2]= Arne navn[3]= Jo Test 2dim tekst-sortering: telefonliste[0]= Per, med tlf.: telefonliste[1]= Arne, med tlf.: telefonliste[2]= Kari, med tlf.: telefonliste[3]= Jo, med tlf.: Resultat av sortering med heltalls-metoden kodet, de to andre tomme

16 Sortering av tekster (String)  Vi skal sortere denne ved å bytte om på pekerne (la a[0] peker på ”Arne”,..osv) med innstikkmetoden "Ola” "Kari” "Arne” "Jo" a

Sortere de to første elementene ved å bytte om pekere "Ola” "Kari” "Arne” "Jo" a t t = a[1]; "Ola” "Kari” "Arne” "Jo" a t a[1]= a[0]; "Ola” "Kari” "Arne” "Jo" a t a[0]= t;

public static void sorter(int [] a) { // Sorterer heltallsarrayaen 'a'. for (int k = 0 ; k < a.length-1; k++) { int t = a[k + 1], i = k; while (i >= 0 && a[i] > t) { a[i + 1] = a[i]; i--; } a[i + 1] = t; } } // end heltall-sortering public static void sorter(String [] a) { // Sorterer String-arrayen 'a'. for (int k = 0 ; k < a.length-1; k++) { String t = a[k + 1]; int i = k; while (i >= 0 && ( a[i].compareTo(t) > 0) ){ a[i + 1] = a[i]; i--; } a[i + 1] = t; } } // end String-sortering

>java InnstikkSortering b[0]= 1 b[1]= 2 b[2]= 3 b[3]= 7 b[4]= 14 b[5]= 77 b[6]= 156 Test tekst-sortering: navn[0]= Arne navn[1]= Jo navn[2]= Kari navn[3]= Ola Test 2dim tekst-sortering: telefonliste[0]= Per, med tlf.: telefonliste[1]= Arne, med tlf.: telefonliste[2]= Kari, med tlf.: telefonliste[3]= Jo, med tlf.: Test med heltall og enkel String-sortering kodet, 2dim sortering tom

20 Sortering av 2-dim String array  Vi kan sortere denne på to måter:  Bytte om på pekerne til radene (la a[0] peker på ”Arne”-raden,..osv)  Enklest  Bytte om på pekerne til hvert element i hver rad  Mye mer arbeid, vanskeligere kode, langsommere "Jo” ” ” "Arne” " " "Kari” " " a "Per” " "

public static void sorter(String [] a) { // Sorterer String-arrayen 'a'. for (int k = 0 ; k < a.length-1; k++) { String t = a[k + 1]; int i = k; while (i >= 0 && ( a[i].compareTo(t) > 0) ){ a[i + 1] = a[i]; i--; } a[i + 1] = t; } } // end String-sortering public static void sorterEtterKol1(String [] [] a) { // Sorterer den 2-dim String-arrayen 'a’ ettter verdi i kol.1. for (int k = 0 ; k < a.length-1; k++) { String [] tRad = a[k + 1]; int i = k; while (i >= 0 && ( a[i][0].compareTo(tRad[0]) > 0) ){ a[i + 1] = a[i]; i--; } a[i + 1] = tRad; } } // end 2-dim String-sortering

M:\INF1000\prog2>java InnstikkSortering b[0]= 1 b[1]= 2 b[2]= 3 b[3]= 7 b[4]= 14 b[5]= 77 b[6]= 156 Test tekst-sortering: navn[0]= Arne navn[1]= Jo navn[2]= Kari navn[3]= Ola Test 2dim tekst-sortering: telefonliste[0]= Arne, med tlf.: telefonliste[1]= Jo, med tlf.: telefonliste[2]= Kari, med tlf.: telefonliste[3]= Per, med tlf.: Alle sorterings metodene skrevet

23 Dokumentasjon av klassen og metodene - javadoc >javadoc ISort.java Loading source file ISort.java... Constructing Javadoc information... Standard Doclet version Generating constant-values.html... Building tree for all the packages and classes... Building index for all the packages and classes... Generating overview-tree.html... Generating index-all.html... Generating deprecated-list.html... Building index for all classes... Generating allclasses-frame.html... Generating allclasses-noframe.html... Generating index.html... Generating packages.html... Generating ISort.html... Generating package-list... Generating help-doc.html... Generating stylesheet.css...

/** * Klasse for sortering etter 'innstikk-metoden', se * Rett på Java - kap.5.7. * Sortering av heltallsarray, tekster og en to-dimensjonal * tekst-array sortert etter verdiene i første kolonne. * * N.B. Bare velegnet for mindre enn 100 elementer. * * Copyright : A.Maus, Univ. i Oslo, 2003 **********************************************************/ public class ISort { /** * Sorterer heltall i stigende rekkefølge a heltallsarrayen som sorteres * Endrer parameter-arrayen. ********************************************/ public static void sorter(int [] a) { } /** * Sorterer String-arrayer i stigende leksikografisk orden. a arrayen som sorteres * Endrer parameter-arrayen ********************************************/ public static void sorter(String [] a) { } /** * Sorterer en to-dimensjonale String-array * etter verdiene i første kolonne. * Nytter pekerombytting av radpekerne. * Antar at alle radene har minst ett element a en to-dimensjonal array som sorteres * Endrer parameter-arrayen. ******************************************************/ public static void sorterEtterKol1(String [] [] a) { } } // end class ISort