eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingsortowanie › Re: sortowanie
  • Received: by 10.236.35.229 with SMTP id u65mr1211877yha.16.1350247906793; Sun, 14 Oct
    2012 13:51:46 -0700 (PDT)
    Received: by 10.236.35.229 with SMTP id u65mr1211877yha.16.1350247906793; Sun, 14 Oct
    2012 13:51:46 -0700 (PDT)
    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!feed.xsnews.nl!border-2.ams.xs
    news.nl!xlned.com!feeder3.xlned.com!feeder1.cambriumusenet.nl!feed.tweaknews.nl
    !209.85.216.87.MISMATCH!l8no51018933qao.0!news-out.google.com!r17ni24752519qap.
    0!nntp.google.com!l8no51898348qao.0!postnews.google.com!glegroupsg2000goo.googl
    egroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Sun, 14 Oct 2012 13:51:46 -0700 (PDT)
    In-Reply-To: <k5f6nr$mov$1@node2.news.atman.pl>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=79.162.93.141;
    posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
    NNTP-Posting-Host: 79.162.93.141
    References: <k59gbj$be7$1@node2.news.atman.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>
    <b...@g...com>
    <c...@g...com>
    <k5cs8t$bkr$1@node1.news.atman.pl>
    <7...@g...com>
    <k5e2d2$jgh$1@node2.news.atman.pl>
    <a...@g...com>
    <k5eoaa$5rd$2@node1.news.atman.pl>
    <c...@g...com>
    <k5epck$9mm$1@node2.news.atman.pl>
    <0...@g...com>
    <k5equl$b7l$1@node2.news.atman.pl>
    <9...@g...com>
    <k5eule$cj3$1@node1.news.atman.pl> <k5f6nr$mov$1@node2.news.atman.pl>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <3...@g...com>
    Subject: Re: sortowanie
    From: kenobi <p...@g...com>
    Injection-Date: Sun, 14 Oct 2012 20:51:46 +0000
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:199920
    [ ukryj nagłówki ]

    W dniu niedziela, 14 października 2012 22:19:08 UTC+2 użytkownik bartekltg napisał:
    > W dniu 2012-10-14 20:01, bartekltg pisze:
    >
    > >> w tym drugim wypadku (z intami) - jak dokladnie?
    >
    > >
    >
    > > Najpierw dla 2 niższych bajtów, potem dla 2 wyzszych.
    >
    > > Tablica pomocnicza tylko jedna, raz z oryginału lecimy
    >
    > > na pomocniczą, drugim razem z powrotem.
    >
    > >
    >
    > >> (kod w c) bo to jest druga czesc tego o czym ja tu pisze
    >
    > >
    >
    > > Mam Ci kod napisać? A za ile;>
    >
    >
    >
    >
    >
    > Niech będzie dzień dobroci.
    >
    > Przetestowane, porównane z std::sort
    >
    > Na przedziale n 10^5 - 10^7 przewaga 2 do 3.5 raza
    >
    > szybsze. Co ciekawe, przewaga pozycyjnego od pewnego
    >
    > momentu maleje.
    >
    >
    >
    >
    >
    > void pozycyjne(unsigned int * tab, int n)
    >
    > {
    >
    > const int shift = 16;
    >
    > const int K = 1<<shift;
    >
    >
    >
    > int * h = new int [K];
    >
    > unsigned int * temp = new unsigned int [n];
    >
    >
    >
    >
    >
    > for (int j=0;j<K;j++) //zerowanie
    >
    > h[j]=0;
    >
    >
    >
    > for (int j=0;j<n;j++)//zliczanie wystąpień
    >
    > h[(unsigned short)(tab[j])]++;
    >
    >
    >
    > for (int j=1;j<K;j++) //akumulacja/zmiana liczby wystąpień
    >
    > h[j]+=h[j-1]; //na indeksy
    >
    >
    >
    > for (int j=0;j<n;j++)//kopiowanie
    >
    > {
    >
    > temp[--h[(unsigned short)tab[j]]]=tab[j];
    >
    > }
    >
    > ///////////faza druga
    >
    > for (int j=0;j<K;j++) //zerowanie
    >
    > h[j]=0;
    >
    >
    >
    > for (int j=0;j<n;j++)//zliczanie wystąpień
    >
    > h[(unsigned short)(temp[j]>>shift)]++;
    >
    >
    >
    > for (int j=1;j<K;j++) //akumulacja/zmiana liczby wystąpień
    >
    > h[j]+=h[j-1]; //na indeksy
    >
    >
    >
    > for (int j=n-1;j>=0;j--)//kopiowanie
    >
    > {
    >
    > tab[--h[(unsigned short)temp[j]>>shift]]=temp[j];
    >
    > }
    >
    >
    >
    > delete[]temp;
    >
    > delete[]h;
    >
    >
    >
    > }
    >
    >
    nie rozumiem tego zlozenia, jak sortowanie tego
    co bylo posortowane po niskiej polowie po wysokiej czesci zlozy sie tak by wszystko
    bylo ok?

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: