Puede obtener una copia bastante confiable del código fuente CLR del SSCLI20 source distribution. Fue publicado en 2005 y, en ese momento, era una copia bastante precisa de la versión 2 de CLR. Nunca se encontró una discrepancia obvia.
Eso se ha movido desde entonces, hace ya 7 años y una actualización bastante importante de la versión de CLR desde entonces. Pero TrySZSort() todavía está presente, esas implementaciones de bajo nivel son altamente autoprotegidas. Usted encontrará que es declarada en CLR/src/vm/ecall.cpp y se asigna a ArrayHelper :: TrySZSort(), un método C++ declarada en CLR/src/vm/arrayhelpers.cpp
Es lo contrario muy aburrido, simplemente llama a un método de clase de plantilla llamado ArrayHelpers<T>.QuickSort()
, especializado por tipo de elemento de matriz para elementos de tipo de valor.
Cual es la forma en que Tony Hoare lo escribió hace 52 años. Aunque no en C++;)
Encontrará el motivo por el que este código está escrito en C++ y no en C# en this answer.
Ese método se implementa en código nativo, de ahí la palabra clave 'extern'. Podría incluirse en la fuente de referencia en alguna parte, pero a menos que sienta curiosidad por ver cómo se implementa, probablemente sea más rápido que cualquier cosa que pueda escribir en el código administrado. –
http://stackoverflow.com/questions/6842090/c-sharp-fastest-way-to-sort-an-array-in-descending-order – xandercoded
Tengo curiosidad porque se llama QuickSort ingenuo a menos que se use Comparer predeterminado. Entonces, eso significa Array.Sort no garantiza el peor caso de N * Log (N) incluso si se llama TrySZSort o no. –