DAA - Sortir Cepat

Ini digunakan berdasarkan prinsip divide-and-conquer. Pengurutan cepat adalah algoritme pilihan dalam banyak situasi karena tidak sulit untuk diterapkan. Ini adalah jenis tujuan umum yang baik dan mengkonsumsi sumber daya yang relatif lebih sedikit selama eksekusi.

Keuntungan

  • Ini ada di tempatnya karena hanya menggunakan tumpukan tambahan kecil.

  • Itu hanya membutuhkan n (log n) waktu untuk menyortir n item.

  • Ini memiliki loop dalam yang sangat pendek.

  • Algoritme ini telah menjalani analisis matematis menyeluruh, pernyataan yang sangat tepat dapat dibuat tentang masalah kinerja.

Kekurangan

  • Ini rekursif. Apalagi jika rekursi tidak tersedia, implementasinya sangat rumit.

  • Ini membutuhkan waktu kuadrat (yaitu, n2) dalam kasus terburuk.

  • Ini rapuh, yaitu kesalahan sederhana dalam implementasi dapat luput dari perhatian dan menyebabkannya berkinerja buruk.

Pengurutan cepat bekerja dengan mempartisi larik yang diberikan A[p ... r] menjadi dua sub larik yang tidak kosong A[p ... q] dan A[q+1 ... r] sedemikian rupa sehingga setiap kunci masuk A[p ... q] kurang dari atau sama dengan setiap tombol masuk A[q+1 ... r].

Kemudian, dua sub-array diurutkan berdasarkan panggilan rekursif ke Quick sort. Posisi pasti dari partisi tersebut bergantung pada larik dan indeks yang diberikanq dihitung sebagai bagian dari prosedur partisi.

Algorithm: Quick-Sort (A, p, r) 
if p < r then 
   q Partition (A, p, r) 
   Quick-Sort (A, p, q) 
   Quick-Sort (A, q + r, r)

Perhatikan bahwa untuk mengurutkan seluruh larik, panggilan awal harus Quick-Sort (A, 1, length[A])

Sebagai langkah pertama, Quick Sort memilih salah satu item dalam larik untuk diurutkan sebagai pivot. Kemudian, array tersebut dipartisi di kedua sisi pivot. Elemen yang lebih kecil dari atau sama dengan poros akan bergerak ke kiri, sedangkan elemen yang lebih besar atau sama dengan poros akan bergerak ke arah kanan.

Mempartisi Array

Prosedur partisi mengatur ulang sub-array di tempat.

Function: Partition (A, p, r) 
x ← A[p] 
i ← p-1 
j ← r+1 
while TRUE do 
   Repeat j ← j - 1 
   until A[j] ≤ x  
   Repeat i← i+1 
   until A[i] ≥ x  
   if i < j then  
      exchange A[i] ↔ A[j] 
   else  
      return j

Analisis

Kompleksitas kasus terburuk dari algoritma Quick-Sort adalah O(n2). Namun dengan menggunakan teknik ini, dalam kasus rata-rata umumnya kita mendapatkan keluarannyaO(n log n) waktu.