Bạn có thể nhận được bản sao khá đáng tin cậy của mã nguồn CLR từ SSCLI20 source distribution. Nó đã được xuất bản vào năm 2005 và, vào thời điểm đó, là một bản sao khá chính xác của phiên bản CLR 2. Không bao giờ tìm thấy một sự khác biệt rõ ràng.
Điều đó được di chuyển kể từ đó, đã 7 năm trước và cập nhật phiên bản CLR khá lớn kể từ đó. Nhưng TrySZSort() vẫn còn xung quanh, những triển khai ở mức độ thấp này rất tự bảo tồn. Bạn sẽ tìm thấy nó khai báo trong clr/src/vm/ecall.cpp và ánh xạ tới ArrayHelper :: TrySZSort(), một phương pháp C++ khai báo trong clr/src/vm/arrayhelpers.cpp
Đó là trường hợp rất nhàm chán, nó chỉ gọi một phương thức lớp mẫu có tên là ArrayHelpers<T>.QuickSort()
, chuyên biệt theo loại phần tử mảng cho các phần tử kiểu giá trị.
Đó chỉ là cách Tony Hoare viết lên 52 năm trước. Mặc dù không có trong C++;)
Bạn sẽ tìm thấy lý do mã này được viết bằng C++ chứ không phải trong C# trong this answer.
Nguồn
2012-08-14 01:34:49
Phương pháp đó được triển khai bằng mã gốc, do đó từ khóa 'extern'. Có thể được bao gồm trong nguồn tham chiếu ở đâu đó, nhưng trừ khi bạn chỉ tò mò muốn xem nó được triển khai như thế nào, nó có thể sẽ nhanh hơn bất cứ thứ gì bạn có thể viết trong mã được quản lý. –
http://stackoverflow.com/questions/6842090/c-sharp-fastest-way-to-sort-an-array-in-descending-order – xandercoded
Tôi tò mò vì QuickSort ngây thơ được gọi trừ khi Comparer mặc định được sử dụng. Vì vậy, điều đó có nghĩa là Array.Sort không đảm bảo trường hợp xấu nhất N * Log (N) ngay cả khi TrySZSort được gọi hay không. –