Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2014-01-25 18:18:37.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:radixsort.in, radixsort.outSursăArhiva Educationala
AutorArhiva EducationalaAdăugată delaurionLaurentiu Ion laurion
Timp execuţie pe test0.75 secLimită de memorie131072 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Radix Sort

Se dau N numere naturale, intr-o ordine oarecare, si se cere sortarea lor in ordine crescatoare.

Date de intrare

Fişierul de intrare radixsort.in va avea pe prima linie numerele N, A, B si C separate prin cate un spatiu.
Cele N numere se vor genera dupa urmatoarea formula:
v[i] = B, pentru i = 1
v[i] = (A * v[i-1] + B) % C, pentru 2 ≤ i ≤ N

Date de ieşire

În fişierul de ieşire radixsort.out se vor tipari pe prima linie numerele generate de pe pozitiile 1, 11, 21, 31, ... (din 10 in 10) in ordine crescatoare, separate printr-un singur spatiu.

Restricţii

  • 1 ≤ N ≤ 10 000 000
  • Toate cele N numere vor fi cuprinse intre 0 si 231-1 inclusiv.

Exemplu

radixsort.inradixsort.out
100 12 38 123
2 14 23 38 50 59 71 80 98 110

Indicatii de rezolvare

Structura problemei cere implementarea algoritmului de sortare Radix Sort, fiindca numerele sunt naturale.

Complexitatea lui este \mathit{O} \left( kN \right), unde k este lungimea medie a numerelor sau \mathit{O} \left( N \cdot W/\log N \right), unde W este marimea in biti a word-ului calculatorului (32 pentru int; explicatia aici).

Acest algoritm nu se bazeaza pe comparatii deci nu este restrictionat de limita \Omega \left( N \cdot \log N \right) precum Merge Sort sau Quick Sort

O solutie bazata pe comparatii, folosind functia std::sort() obtine aproximativ 30 de puncte.

O sursa de 100 de puncte se gaseste aici. Aceasta solutie se bazeaza pe Counting Sort, care are complexitatea \mathit{O} \left( N \right) dar este limitat de faptul ca foloseste memorie suplimentara egala cu maximul dintre numere, care poate ajunge la 231-1 in acest caz. Astfel impartim numerele in 4 bucket-uri de cate un byte (pe care le numim "cifre") si le sortam incepand cu cea mai putin semnificativa.

Pentru mai multe detalii si un studiu comparativ al algoritmilor de sortare vizitati pagina Wikipedia dedicata acestui subiect.

Aplicatii

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?