Sortowanie przez zliczanie (Counting-sort) + sortowanie pozycyjne (Radix-sort)

Zadanie AL4.1 Zilustruj działanie procedury Counting-sort (przedstawionej na wykładzie) sortując następujące słowa (ciągi znaków) według pierwszej litery: synowa, mama, brat, córka, dziadek, babcia, syn, bratowa, ciocia, dziecko, teściowa, stryjek, szwagier, tata, wujek, teść, siostra, zięć.

Zadanie AL4.2 Zilustruj działanie procedury Radix-sort sortując następujące słowa: (a) cow, dog, sea, rug, row, mob, box, tab, bar, ear, tar, dig, big, tea, now, fox; przy czym każdą pozycję sortujemy przez zliczanie (b) synowa, mama, brat, córka, dziadek, babcia, syn, bratowa, ciocia, dziecko, teściowa, stryjek, szwagier, tata, wujek, teść, siostra, zięć.

Zadanie AL4.4 (3 pkt.) Napisz program sortujący napisy (ciągi liter/cyfr) według pierwszej litery (nie rozróżniając dużych i małych liter), stosując sortowanie przez zliczanie.

Zadanie AL4.5 (4 pkt.) Napisz program sortujący napisy (ciągi liter/cyfr) stałej długości równej siedem, stosując sortowanie pozycyjne (od ostatniego znaku do pierwszego), gdzie sortowanie według kolejnych znaków (nie rozróżniając dużych i małych liter) ma być wykonane sortowaniem przez zliczanie.

Uwagi: Napisy powinny być dostępne przez wskaźniki, tzn. sortujemy w istocie tablice wskaźników. Wstawić wydruk kontrolny po sortowaniu względem kolejnych pozycji. W plikach napisy10a.c i napisy10b.c są przykłady, które mogą być pomocne.

Zadanie AL4.6 (5 pkt.) W oparciu o wykład napisz program sortujący napisy (ciągi liter/cyfr) różnej długości (i zajmujące różne ilości pamięci), stosując sortowanie pozycyjne (od ostatniego znaku do pierwszego), gdzie sortowanie według kolejnych znaków (nie rozróżniając dużych i małych liter) ma być wykonane sortowaniem przez zliczanie.

Uwaga: Nie jest dobrą praktyką wyliczać długość napisu przy każdej próbie sięgnięcia do niego. Lepiej utworzyć osobną tablicę zawierającą długości napisów.

Zadanie AL4.7 (5+1* pkt.) W pliku nazwiskaASCII (ściągniętym z nieistniejącej już chyba strony www.futrega.org/etc/nazwiska.html) znajduje się wykaz zapisów postaci

X Nazwisko

gdzie X jest liczbą typu int określającą popularność nazwiska Nazwisko. Posortuj te zapisy alfabetycznie według nazwisk i wygeneruj nowy plik zawierający tak uporządkowane zapisy. Sortowanie wykonaj na dwa sposoby:
  1. sortowanie pozycyjne jak w zadaniu AL4.6 oraz
  2. sortowanie przez porównania: Quicksort lub Heapsort.
Porównaj rzeczywiste czasy obu sortowań (samych sortowań, bez czytania/zapisu do pliku).

Uwaga: Plik z nazwiskami można przekonwertować tak, aby pozbyć się znaków spoza kodu ASCII.