Hi
Ein Vector ist prinzipiell ein einfaches Array, nur in eine Klasse verpackt. Es gibt zwar Verhaltensunterschiede zB. beim Anlegen, und bestimmte Anforderungen an den verwendeten Datentyp (falls es ein Vektor von einer eigenen Klasse sein soll), aber aus Sicht von Sortieralgorithmen ist nichts anders.
Ein Set ist nicht mit Vektor/Array/Liste vergleichbar weil es den selben Wert nicht mehrfach enthalten kann.
Damit bleibt nur Array vs Liste
Wenn einen die realen Ausführungszeiten interessieren (statt theoretische Komplexität) sind Arrays vermutlich immer besser, aus vielen Gründen (müsste man aber messen, um sicher zu sein). Typische Implementierungen von Quicksort und Heapsort sind sowieso mehr für Arrays gedacht (auch wenn es mit Anpassungen für Listen auch ziemlich gut werden kann). Für Mergesort ist es prinzipiell egal, der Zeitunterschied kommt von technischen Details (Cacheverhalten usw.usw.).
Wenn Geschwindigkeit wichtig ist, warum nicht die schon eingebauten Sortierfunktionen der Sprache verwenden? "Klassische" Sortieralgos wie auf Wikipedia zu implementieren ist ganz nett, aber die in den Standardlibs sind ziemlich aggressiv auf Geschwindigkeit optimiert; die Arbeit die da drinsteckt macht man nicht einfach mal so nach (Angepasste modernere Algos, die im Durchschnitt noch ein bisschen besser sind als die Einfachvarianten, und Ausnutzen aller möglichen Hardware-bezogenen Optimierungsmöglichkeiten (Cacheverhalten, spezielle CPU-Befehle, usw.usw.))