Здравейте!

Днес отделих известно време да напиша това домашно, не отнема много време. :) Та, ето моите решения на задачите: GitHub.

Имплементациите на сортиращите алгоритми са стандартни. По-интересен беше MergeSort използвам втори списък за сливането. Получи се и малко объркване, защото когато присвоим нова стойност на collection в метода Sort, то НЕ се променя колекцията, която сме подали. Затова използвам изчистване и наливане отново на елементите. 

Алгоритмите за търсене също са стандартни - линейно обхождане на колекцията и индикиране за наличие/неналичие на елемента и двоично търсене с итеративен вариант, като първо сортирам колекцията.

За Shuffle метода използвам алгоритъма на Fisher-Yates, като обхождам отзад напред, за да си спестя няколко излишни калкулации (събирания). Сложността е O(n), защото имаме едно обходане на колекцията.

Написах и тестове за сортиранията и търсенията - като при сортирането тествам сортирана, рандом и обърната колекции. Тестовете при търсенето са стандартни.

Ако имате забележки или съвети, моля споделете. :)

ПП Благодаря на Teodor Kurtev 1 за идеята за изчистването и наливането на колекцията отново! :)