Zadanie na laboratorium 9

Po pierwsze, proszę się zaznajomić z dokumentacją następujących interfejsów z typami generycznymi:
  - Comparable<T>
  - List<T>        (implementację tego interfejsu ArrayList<T>, znamy i używamy już od dawna)

Proszę zaimplementować prosty interfejs do sortowania list, wraz z kilkoma implementacjami. Interfejs powinien być parametryzowany typem T, który rozszerza Comparable<T>; typ ten będzie używany w sortowaniu. Obiekt sorter powinien mieć jedną metodę List<T> sort(List<T> a), która dla danej listy zwróci posortowaną kopię tej listy. Proszę zaimplementować dwie implementacje tego interfejsu, jedną z jakimkolwiek kwadratowym algorytmem sortującym i jedną z jakimkolwiek liniowo-logarytmicznym (np. insertion sort i quicksort). Obie implementacje powinny mieć krótkie funkcje main ze sprawdzeniem na małym przykładzie, czy wszystko działa w porządku.

Zadanie dla ambitnych: zmienić implementację tak by działało to dla T[] zamiast List<T>, oraz rozwiązać wszystkie Javowe błędy kompilacyjne związane z tablicami genericów.