Neden bazı sıralama yöntemleri 1, 10, 2, 3… gibi sıralama yapıyor?


30

Beklenilen 1, 2, 3, 10 yerine pek çok sayısal sıralama yönteminin 1, 10, 2, 3 ... gibi göründüğünü fark ettim. ilk yönteme ihtiyacım var ve bir kullanıcı olarak pratikte gördüğümde hayal kırıklığına uğradım. İlk stilin ikincisi için yasal kullanım örnekleri var mı? Eğer öyleyse, bunlar nedir? Olmazsa, ilk sıralama stili nasıl oldu? Her sıralama yönteminin resmi adları nedir?


Sorunuza bir cevap değil, ancak sayı içerebilecek dizelerin bir listesini sıralamak zorundaysanız, muhtemelen Alphanum algoritmasını kullanmak istersiniz: davekoelle.com/alphanum.html
TehShrike 11

Çok çok basit. Sıralama yaparken, algoritma soldan sağa doğru tarar. Yani, 1 ve 5'e gelince, 5 daha büyüktür ve eğer aslında 1 134234 gibi daha büyük bir sayının parçasıysa, bu EVEN ile aptalca gider. 134234'ün 5'ten büyük olduğunu bilmek için aslında taramamız gerekir sayıyı son haneye (aslında ilk haneye) geçtikten sonra 4 geriye doğru çalışır ve hangisinin gerçekte 5'ten büyük olan 100000 olduğunu görür. Karşılaştırmada sonra (veya daha önce) olanları görmezden gelen karakter.
AbstractDissonance

1
En.wikipedia.org/wiki/Natural_sort_order dosyasını okuduysanız , mantıklı gelmelidir. Doğal düzende, rakam dizeleri tek bir "karakter" olarak gruplandırılır. Fiziksel değil, sadece mantıksal olarak, ilk durumda olduğu gibi yine de karakter karşılaştırmaları yapabiliriz, ancak tamsayı dizelerini karakterlerden ziyade tamsayı dizeleriyle karşılaştırabiliriz, bu da tam değeri karşılaştırmamızı sağlar. Her şey bu şekilde olmalı, çünkü biz insanların bir şeyleri okuma şeklimiz (sayılar için, aslında sağdan sola okuduk, soldan sağa bir dizgede bile) 1234 = 1000 + 200 + 30 + 4, 4000 + 300 + 20 + 1
AbstractDissonance

Yanıtlar:


62

yani lexicographic dizeleri olarak temelde dil davranır değişkenler anlamına gelir ve Karakter bazında karşılaştırır sıralama ( "200"daha büyüktür "19999"çünkü '2'daha büyüktür '1')

Bunu düzeltmek için

  • değerlerin tamsayı olarak değerlendirildiğinden emin olmak,

  • '0'dizgilere hazırlık yapın, böylece hepsinin eşit uzunlukları vardır (sadece maksimum değeri bildiğiniz zaman uygulanabilir).
    Bu nedenle, önceden hazırlanmış 0 ile ortam dosyalarında (S1E01) bölüm numaralarını göreceksiniz, böylece bir sözlükbilimsel bir şeyler karışıklığa neden olmaz ve programların alfabetik sırayla oynatılmasını / görüntülenmesini sağlar,

  • veya önce dizelerin uzunluğunu karşılaştıran özel bir karşılaştırıcı yapın (daha kısa dizeler daha küçük tamsayılar) ve eşit olduklarında sözlükbilgisel olarak karşılaştırın (öncülük konusunda dikkatli olun '0').


5
'Lexiographic' için +1. Bu terimi hiç duymadım, bunu sadece alfabetik sıralama olarak düşünürdüm - sayılar sizin dediğiniz gibi bir dize türü olarak değerlendiriliyor.
Anonim

3
Dizgelere '0' eklemek için +1. Bunu programlamıyordum, klasörlerimin adıydı ve 'Bölüm 10', 'Bölüm 2'den önce geliyordu. Sonra 01-09 olarak adlandırılan 1-9 bölümlerini yaptım ve şimdi "doğru" olarak sıralandı.
Marvin,

6

Alfabetik olarak, 1, 2'den önce gelir. İlk yöntemi gördüğünüzde, bunun arzu edilmesinden kaynaklanmaz, ancak sıralama kesinlikle alfabetik olduğu için (ve her seferinde bir karakter olmak üzere soldan sağa doğru olur): 1, 2, 10 anlamlı olur. sana göre ama sadece alfabetik karşılaştırmayı bilen bir bilgisayara değil. O kadar basit bir karşılaştırma yapmanın, onu takip eden 0'ın gerçekte ikiden sonra geldiğini bilmek mümkün değildir .

Sayıları doğru işleyen karışık kelime ve sayı sıralamaları gördüğünüzde, sıralamanın daha akıllı olması ve bunun üzerine, yine de genellikle yalnızca bir dizgenin başlangıcında veya sonunda çalışması gerekir.


4

Bu, sayı dizelerini sayısal olarak değil, alfabetik olarak sıralamanızın sonucudur.

Bu sıralama stili, sortörneğin, --numeric-sortsayısal değerleri yorumlamaya çalışmasını söyleyen komut satırı seçeneğini kullanmadığınız sürece , unix komutunun varsayılan davranışıdır .


4

Diğerleri, bu türün ne olduğuna cevap veriyor, fakat hiç kimse neden onu gördüğünüzle ilgili sorunuzu yanıtlamadı. Cevap gerçekten o kadar heyecan verici değil. Bu genellikle bir böcek. Çoğu sıralama yöntemi, varsayılan olarak birinden diğerine varsayılandır ve programlama, sayıları sıralarken varsayılanı değiştirmeye dikkat etmez.


Karışık alfabetik / sayısal bağlamlarda, deneyimli kullanıcılar, tutarlı ve tahmin edilebilir olduğu için, sözlü sıralamayı tercih etme eğiliminde olacaktır . Akıllıca "akıllıca" karıştırmaya çalışan her uygulama, sözlü ve sayısal sıralamaları biraz daha farklı hale getirir, bu da sorgulanabilir bir yardımcı programdır.
j__m
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.