Dalam membaca tentang berbagai algoritma penyortiran, saya pernah melihatnya menyebutkan bahwa ada yang "stabil" dan ada yang tidak. Apa artinya itu, dan pengorbanan apa yang terlibat atas dasar itu ketika memilih suatu algoritma?
43
Jawaban:
Sortir stabil adalah yang mempertahankan urutan asli set input, di mana algoritma perbandingan tidak membedakan antara dua item atau lebih.
Pertimbangkan algoritma pengurutan yang mengurutkan kartu berdasarkan peringkat , tetapi tidak sesuai. Jenis stabil akan menjamin bahwa urutan kartu asli dengan peringkat yang sama dipertahankan; jenis yang tidak stabil tidak akan.
sumber
Algoritme yang stabil menjaga urutan relatif elemen.
Jadi algoritma penyortiran yang stabil akan mempertahankan urutan nilai relatif yang membandingkan sebagai sama.
Pertimbangkan algoritma pengurutan tempat kami mengurutkan koleksi titik 2d berdasarkan dimensi X-nya.
Koleksi yang akan disortir:
{(6, 3), (5, 5), (6, 1), (1, 3)}
Diurutkan Stabil:
{(1, 3), (5, 5), (6, 3), (6, 1)}
Sortir Biasa: Salah satu
{(1, 3), (5, 5), (6, 3), (6, 1)}
, atau{(1, 3), (5, 5), (6, 1), (6, 3)}
Adapun tradeoff ... well, sortasi stabil kurang efisien, tetapi kadang-kadang Anda membutuhkannya.
Misalnya ketika pengguna mengklik tajuk kolom untuk mengurutkan nilai di UI, masuk akal untuk mengharapkan urutan penyortiran sebelumnya digunakan dalam kasus nilai yang sama.
sumber