logi sisse meist KKK

Tere, kas keegi võiks tuua näiteid kiiretest algoritmidest, millega sorteerida järjendeid jms. Valikumeetodiga ja pistemeetodiga olen kokku puutunud. Hea oleks kui kommentaarid oleks juures.

küsitud Dec 01 '09 at 19:44

Timo's gravatar image

Timo
21226


Kui tahta eesti keeles lugeda, siis on vist parim allikas Jüri Kiho raamat "Algoritmid ja andmestruktuurid". Selles tasub tähele panna, et lisaks sorteerimise peatükile on üks päris hea algoritm kirjeldatud kuhjade teema all.

Üks lühem ja võrgust kättesaadav materjal on Jaan Vajaka koostatud informaatikaolümpiaadi õppesessiooni konspekt.

link

vastatud Dec 02 '09 at 23:43

Ahto%20Truu's gravatar image

Ahto Truu ♦♦
6596711

Väga head näited kõigi enamlevinud algoritmide kohta: http://www.sorting-algorithms.com/

Igal algoritmil on oma head ja halvad omadused, mis tulevad välja erinevaid andmestikke sortides.

link

vastatud Dec 01 '09 at 22:04

Tambet%20Matiisen's gravatar image

Tambet Matiisen ♦♦
77791125

Enamasti on keelde sisse ehitatud sort, mis on selle keele süntaksi võimalustele seatuna võimalikult optimaalne. Javas on selleks Collection.sort() ja Arrays.sort(), ning nende kahe vahe seisneb andmestruktuuris, mida nad sordivad.

Selleks, et kirjeldada, kuidas sortima peab, tuleb sordile luua komparaator. Hiljuti kirjutasin näite, kuidas kasutada TreeSet andmestruktuuri Javas. Lühialt on tegemist andmestruktuuriga, mis hoiab ennast kogu aeg sordituna, ning seda võrdlemisi efektiivselt.

public static class customC {
    private String name; 
    private int value;

    public customC(String name, int value) {super();this.name = name;this.value = value;}
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
    public int getValue() {return value;}
    public void setValue(int value) {this.value = value;}

    @Override
    public String toString() {
        return new StringBuilder().append("[").append(this.name)
                .append(":").append(this.value).append("]").toString();
    }
}

public static void main(String[] args) {
    TreeSet<customC> ts = new TreeSet<customC>(new Comparator<customC>(){
        public int compare(customC a, customC b) {
            int result = a.getName().compareToIgnoreCase(b.getName());
            return (result != 0 ? result : a.getValue() - b.getValue());
        }
    });
    ts.add(new customC("ab", 1988));
    ts.add(new customC("ab", 1979));
    ts.add(new customC("ba", 1988));
    ts.add(new customC("ab", 1984));
    ts.add(new customC("ab", 1980));
    customC ce = new customC("ab", 1983);
    ts.add(ce);

    StringBuilder sb = new StringBuilder();
    sb.append(ts.headSet(ce).last()).append(" comes before ")
        .append(ce).append("\n").append(ts);

    System.out.println(sb.toString());
}

Väljundiga:

[ab:1980] comes before [ab:1983]
[[ab:1979], [ab:1980], [ab:1983], [ab:1984], [ab:1988], [ba:1988]]

Isiklikult eelistan mestimissordil põhinevaid sorte, mis skaleeruvad hästi - nt. timsort, mis tuleb Java 7'ga, ning lõpuks vahetab täielikult välja aegunud kiirsordi.

Üldjuhul sellega vajalik teadmine sortimisest võibki piirdudagi. 'Võrgust kättesaadav materjal' on üldjuhul, kas: täiesti mittesobilik, saast - mis töötab efektiivselt vaid parimal juhul või on lihtsalt aegunud. Vahest kõige mõistlikum tegu oleks võimalusel jätta andmete organiseerimine teise kihti - andmebaasi.

Kui aga on soovi uurida, kuidas on sortimisalgoritmid ehitatud, ning miks nõnda, soovitan lugeda: Algorithms in Java, Parts 1-4 By Robert Sedgewick

link

vastatud Sep 27 '10 at 20:27

Margus's gravatar image

Margus
51116

Sinu vastus
lülita eelvaade

Jälgi seda küsimust

By Email:

Pärast sisselogimist saad tellida muudatuse teavitusi siit

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *kaldkiri* või __kaldkiri__
  • **paks kiri** või __paks kiri__
  • link:[tekst](http://url.com/ "pealkiri")
  • pilt?![alt tekst](/path/img.jpg "pealkiri")
  • nummerdatud nimekiri: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • põhilised HTML märgendid on samuti toetatud

Pinu tööpakkumised

kõik pakkumised »

Küsimuse sildid:

×16
×1

küsitud: Dec 01 '09 at 19:44

nähtud: 3,383 korda

viimati uuendatud: Sep 27 '10 at 20:27

Litsents: Creative Commons Attribution License | Kontakt: info@pinu.ee