eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingsortowanie › Re: sortowanie
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!wsisiz.edu.pl!plix.pl!newsfeed2.plix.pl!news.nask.pl!news.nask.org.pl!
    news.internetia.pl!not-for-mail
    From: Edek Pienkowski <e...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: sortowanie
    Date: Sun, 14 Oct 2012 00:29:17 +0000 (UTC)
    Organization: Netia S.A.
    Lines: 80
    Message-ID: <k5d10s$d0e$5@mx1.internetia.pl>
    References: <k59gbj$be7$1@node2.news.atman.pl>
    <6...@g...com>
    <k59jgh$mb7$1@mx1.internetia.pl> <k59jvr$360$1@node1.news.atman.pl>
    <k59q5n$np3$1@mx1.internetia.pl> <k5bc6k$4ea$1@mx1.internetia.pl>
    <50795bb6$0$1297$65785112@news.neostrada.pl>
    <k5bo04$n79$2@mx1.internetia.pl>
    <507968f5$0$1220$65785112@news.neostrada.pl>
    <k5bqi2$n79$3@mx1.internetia.pl>
    <5079736f$0$1228$65785112@news.neostrada.pl>
    <k5bvji$n79$7@mx1.internetia.pl>
    <7...@g...com>
    <k5c6ta$hlr$1@mx1.internetia.pl>
    <2...@g...com>
    <k5c9ao$hlr$2@mx1.internetia.pl>
    <d...@g...com>
    <k5caif$hlr$3@mx1.internetia.pl> <k5cpcq$8ud$1@node1.news.atman.pl>
    NNTP-Posting-Host: as4-251.poleczki.dialup.inetia.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: mx1.internetia.pl 1350174557 13326 195.114.165.251 (14 Oct 2012 00:29:17
    GMT)
    X-Complaints-To: a...@i...pl
    NNTP-Posting-Date: Sun, 14 Oct 2012 00:29:17 +0000 (UTC)
    X-Tech-Contact: u...@i...pl
    User-Agent: Pan/0.135 (Tomorrow I'll Wake Up and Scald Myself with Tea; GIT 30dc37b
    master)
    X-Server-Info: http://www.internetia.pl/
    Xref: news-archive.icm.edu.pl pl.comp.programming:199861
    [ ukryj nagłówki ]

    Dnia Sun, 14 Oct 2012 00:18:59 +0200, bartekltg napisal:

    > W dniu 2012-10-13 20:06, Edek Pienkowski pisze:
    >> Dnia Sat, 13 Oct 2012 10:50:01 -0700, kenobi napisal:
    >>
    >>>>
    >>>> No to już brzmi fajnie. A co to było to C, która wartość to ma być?
    >>>>
    >>>> Poza tym, czy swapów nie miało być jak najmniej?
    >>>>
    >>>>
    >>> C to dowolna wartosc z tablicy najlepiej gdyby to byla taka ktora podzieli
    >>> tablice na dwa zblizone wielkoscia kawalki, mozna wylosowac dowolna np ze
    >>> srodka przedzialu, wazne tylko by nie miec wielkiego pecha w wielce
    >>> dlugiej serii - bo wtedy stos sie wywali - ale taki pech jest malo
    >>> prawdopodobny
    >>
    >> Dowolna, czy się ją jakoś wybiera? Nie można robiąc te swapy na lewo
    >> i prawo policzyć sobie średniej przy okazji?
    >
    >
    > Oj, to wyższa filozofia;)
    >
    > Można wybierać z prawej, z lewej, ze środka,
    > losowy element, medianę z końców i środka...
    > Jak ktoś chce, może zawsze brać element 7
    > (o ile tablica odpowiednio duża).
    >
    >
    > BTW, algorytm dzielenia proponowany przez fira nie jest najlepszy.
    > Raczej się robi to w ten sposób, że jedzie od początku w górę
    > jednym indeksem, aż napotka się element za duży. Potem od końca
    > w dół drugim indeksem, aż napotka się element za mały
    > (mniejszy od elementu dzielącego). następnie zamienia się
    > te elementy i wszytko powtarza, póki się indeksy nie spotkają.
    >
    > Do testów (i by sprawdzić, ile pamiętam, zajmuję się zupelnie
    > innymi rzeczami) machnąłęm coś takiego:
    >
    > void qsort(int * tabl,int first, int last)
    > {
    > if (last-first>1)
    > {
    > int piv = tabl[first];//element dzielący
    > int i=first; //elementow first i last+1
    > int j=last+1; //nigdy nie dotkniemy
    > do
    > {
    > do i++; while ((i<=last)&&(tabl[i]<piv));
    > do j--; while (tabl[j]>piv); // fajne*)
    > if (i<j) {std::swap(tabl[i],tabl[j])}
    > }while (i<j);
    >
    > tabl[first]=tabl[j];
    > tabl[j]=piv;
    >
    > qsort_insert(tabl, first, j-1);
    > qsort_insert(tabl, j+1, last);
    > }
    > }
    >
    > Dzieki temu odpada jakaś polowa zapisów. W jednym ruchu swapa
    > _dwa_ elementy lądują po odpowiednich stronach podziału.
    >
    > *) nie musimy sprawdzać zakresu, bo tab[first] go trzyma.
    > podobnie, jeśli nasza tablica jest podtablicą taką, że
    > tab[first-1] jest mniejsze, a tab[last+1] wieksze od kazdego
    > elementu naszej tablicy, nie musimy tego sprawdzać.
    > Zerknąłem do stla. Tam z tego korzystają i mają osobne
    > procedury dla prawego kranca, lewego, i podtablicy wewnetrz.

    Mi raczej chodziło o generalnie możliwość policzenia
    średniej z dowolnych obiektów mających "strict weak ordering".
    I fir przestał mnie uczyć quick-sorta :)

    Trochę za późno dla mnie na czytanie kodu, może jutro ;)

    --
    Edek

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: