eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingsortowanieRe: sortowanie
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: sortowanie
    Date: Sun, 14 Oct 2012 00:18:59 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 74
    Message-ID: <k5cpcq$8ud$1@node1.news.atman.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>
    NNTP-Posting-Host: 144-mi3-6.acn.waw.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node1.news.atman.pl 1350166746 9165 85.222.69.144 (13 Oct 2012 22:19:06 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sat, 13 Oct 2012 22:19:06 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120907
    Thunderbird/15.0.1
    In-Reply-To: <k5caif$hlr$3@mx1.internetia.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:199838
    [ ukryj nagłówki ]

    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.

    pzdr
    bartekltg



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: