Saya perhatikan dari banyak metode penyortiran numerik yang kelihatannya mengurutkan berdasarkan 1, 10, 2, 3 ... daripada yang diharapkan 1, 2, 3, 10 ... Saya mengalami masalah dengan skenario di mana saya akan memerlukan metode pertama dan, sebagai pengguna, saya merasa frustrasi setiap kali saya melihatnya dalam praktek. Apakah ada kasus penggunaan yang sah untuk gaya pertama di atas yang kedua? Jika demikian, apakah mereka? Jika tidak, bagaimana gaya sortir pertama muncul? Apa nama resmi untuk setiap metode pengurutan?
31
Jawaban:
yaitu penyortiran leksikografis yang pada dasarnya berarti bahasa memperlakukan variabel sebagai string dan membandingkan karakter dengan karakter (
"200"
lebih besar daripada"19999"
karena'2'
lebih besar dari'1'
)untuk memperbaikinya Anda bisa
memastikan bahwa nilai-nilai diperlakukan sebagai bilangan bulat,
tambahkan
'0'
ke string sehingga semua memiliki panjang yang sama (hanya layak bila Anda tahu nilai maks).Inilah sebabnya mengapa Anda akan melihat penomoran episode pada file media (S1E01) dengan 0 diawali sehingga jenis leksikografis tidak mengacaukan segalanya dan memungkinkan program untuk hanya memutar / menampilkan dalam urutan abjad,
atau buat pembanding khusus yang pertama kali membandingkan panjang string (string lebih pendek menjadi bilangan bulat lebih kecil) dan ketika mereka sama, bandingkan secara leksikografis (hati-hati tentang memimpin
'0'
)sumber
Secara alfabet, 1 muncul sebelum 2. Setiap kali Anda melihat metode pertama, itu bukan karena diinginkan, tetapi karena penyortirannya sangat abjad (dan terjadi kiri-ke-kanan, satu karakter pada satu waktu): 1, 2, 10 masuk akal untuk Anda tetapi tidak ke komputer yang hanya tahu perbandingan alfabet. Tidak ada cara dalam perbandingan sederhana semacam itu untuk mengetahui bahwa yang diikuti oleh 0 benar-benar muncul setelah dua.
Ketika Anda melihat pengurutan kata dan angka campuran yang memperlakukan angka dengan benar, itu karena pengurutan lebih cerdas, dan di atas itu, masih biasanya hanya bekerja di awal atau akhir string.
sumber
Itulah hasilnya ketika Anda mengurutkan string angka secara alfabet dan bukan angka.
Gaya semacam itu adalah perilaku default dari
sort
perintah unix misalnya, kecuali jika Anda menggunakan--numeric-sort
opsi baris perintah, yang memberitahukannya untuk mencoba menafsirkan nilai numerik.sumber
Orang lain memiliki jawaban apa ini, tetapi tidak ada yang benar-benar menjawab pertanyaan Anda tentang mengapa Anda melihatnya. Jawabannya tidak terlalu menarik. Biasanya bug. Sebagian besar metode penyortiran akan default ke satu atau yang lain dan pemrograman cenderung ceroboh mengubah default saat menyortir angka.
sumber