-
Data: 2012-11-24 16:43:30
Temat: Re: Potyczki
Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 2012-11-24 16:25, PK pisze:
> On 2012-11-24, bartekltg <b...@g...com> wrote:
>> Niedawno był to całkiem niezły watek o sortowaniu.
>> Sortowania pozycyjne tez były omówione;)
>
> Wiem. W nim również zwróciłem slawkowi uwagę, że nie rozumie sortowania,
> a potem przestałem się udzielać, bo po prostu żal mi było czasu. Nie
> mniej widzę, że Wasza dyskusja (trwająca chyba kilka tygodni) była
> dla niego zupełnie bezowocna.
Hmm, dyskusja była chyba głownie w około fira.
Zresztą, nie pamiętam dokładnie.
>> Ale posortować beż użycia > na elementach sortowanych się da;)
>> Pewnych specyficznych elementów, jak liczby naturalne.
>
> Można zastąpić relację ">" obliczeniem pewnych f(a,b) i g(a,b), ale
> wyniki tych funkcji trzeba przyrównać do zera.
> Poza tym operacja "=" jest zazwyczaj wolniejsza niż ">".
Ale czasem złożonością jednak przebija. Posortowanie
miliarda bajtów będzie szybsze 'sortowaniem przez zliczanie'
niz qsortem. Tylko jak często mamy taką potrzebę;-)
Odkopałem test, który robiłem w tamtej dyskusji.
Wygląda, że i inty lecą szybciej. Pod warunkiem,
że tablica jest dostatecznie duża.
A, to nizej to kod chyba niepoprawiony, sortowanie
nie jest stabilne. Trzeba gdzieś zamienić kierunek pętli.
pzdr
bartekltg
***
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;
}
*****
pzdr
bartekltg
Następne wpisy z tego wątku
- 24.11.12 16:51 e...@g...com
- 24.11.12 20:38 Stachu 'Dozzie' K.
- 24.11.12 21:18 PK
- 24.11.12 21:19 Stachu 'Dozzie' K.
- 24.11.12 21:35 PK
- 24.11.12 21:44 Stachu 'Dozzie' K.
- 25.11.12 13:15 Roman W
- 25.11.12 13:35 bartekltg
- 25.11.12 14:57 Jacek
- 25.11.12 18:08 PK
- 25.11.12 18:10 PK
- 25.11.12 20:27 Roman W
- 25.11.12 21:07 bartekltg
- 26.11.12 07:23 Jacek
- 26.11.12 10:36 Roman W
Najnowsze wątki z tej grupy
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
Najnowsze wątki
- 2024-05-26 O co chodzi?
- 2024-05-26 PJ autobus-tramwaj
- 2024-05-26 Renault Trafic i lampka z czerwonym STOP
- 2024-05-26 cena pięciocyfrowa
- 2024-05-26 Re: Jak dobra KE "okrada" złą Rosję "dla Ukrainy"
- 2024-05-25 supercap
- 2024-05-25 Sulzbach => Technischer Rollouter (d/m/w) <=
- 2024-05-25 Warszawa => Senior Account Manager <=
- 2024-05-25 Warszawa => Mid PHP Developer (Laravel) <=
- 2024-05-25 Warszawa => Mid PHP Developer (Laravel) <=
- 2024-05-25 Warszawa => Interactive/Experience Designer <=
- 2024-05-25 Warszawa => Key Account Manager <=
- 2024-05-25 Warszawa => SAP WM Consultant / Execution <=
- 2024-05-25 Warszawa => Key Account Manager <=
- 2024-05-25 Re: znów ten wrocław