Kodas
dcsort.go — karkasas
Sukurk dcsort.go (žr. dešinėje). Keturi parašai, keturios sutartys, keturi
panic.
Trys iš keturių yra tas pats greitasis rikiavimas su skirtingu pivotu, tad
Partition parašysi vieną kartą ir panaudosi tris.
Ką testas tikrins
MergeSort— stabilus, negrąžina to paties masyvo (įvestis nekeičiama), ir neviršija n·⌈log₂ n⌉ palyginimų nė vienai tvarkai;QuickSortNaive— surikiuotiems duomenims lygiai n(n−1)/2 palyginimų. Testas reikalauja būtent šito skaičiaus, nes klaida čia yra pamoka;QuickSortMedian3— surikiuotiems duomenims gerokai mažiau nei kvadratas;QuickSortRandom— sėkla fiksuota (rand.NewSource(1)), kad skaičiai kartotųsi.
Vienas dalykas, kurį lengva praleisti
MergeSort grąžina naują masyvą, o ne rikiuoja vietoje. Testas tikrina, kad
įvestis liktų nepaliesta.
Tai ne kaprizas — tai suliejimo rikiavimo kaina. Jam reikia vietos suliejimui, ir ta vieta yra n papildomų elementų. Greitasis rikiavimas jos nereikalauja, ir 7 žingsnyje pamatysi, kad būtent dėl to jis dažnai greitesnis, nors palyginimų atlieka daugiau.