Jangan pernah memilih pivot tetap - ini dapat diserang untuk mengeksploitasi kasus terburuk runtime O (n ^ 2) algoritme Anda, yang hanya akan menimbulkan masalah. Runtime kasus terburuk Quicksort terjadi ketika partisi menghasilkan satu larik dari 1 elemen, dan satu larik n-1 elemen. Misalkan Anda memilih elemen pertama sebagai partisi Anda. Jika seseorang memasukkan array ke algoritme Anda yang urutannya menurun, pivot pertama Anda akan menjadi yang terbesar, jadi semua yang lain di dalam array akan pindah ke kiri. Kemudian ketika Anda mengulang, elemen pertama akan menjadi yang terbesar lagi, jadi sekali lagi Anda meletakkan semuanya di sebelah kiri, dan seterusnya.
Teknik yang lebih baik adalah metode median-of-3, di mana Anda memilih tiga elemen secara acak, dan memilih tengah. Anda tahu bahwa elemen yang Anda pilih tidak akan menjadi yang pertama atau yang terakhir, tetapi juga, berdasarkan teorema limit pusat, distribusi elemen tengah akan normal, yang berarti Anda akan cenderung ke tengah (dan karenanya , n lg n waktu).
Jika Anda benar-benar ingin menjamin runtime O (nlgn) untuk algoritme, metode kolom-of-5 untuk menemukan median array berjalan dalam waktu O (n), yang berarti persamaan pengulangan untuk quicksort dalam kasus terburuk akan menjadi T (n) = O (n) (menemukan median) + O (n) (partisi) + 2T (n / 2) (berulang kiri dan kanan.) Menurut Teorema Utama, ini adalah O (n lg n) . Namun, faktor konstanta akan sangat besar, dan jika kinerja kasus terburuk adalah perhatian utama Anda, gunakan jenis gabungan, yang hanya sedikit lebih lambat dari rata-rata quicksort, dan menjamin waktu O (nlgn) (dan akan jauh lebih cepat dari quicksort rata-rata lumpuh ini).
Penjelasan Median Algoritma Median