Tại sao một số phương pháp sắp xếp sắp xếp theo 1, 10, 2, 3 thì sao?


30

Tôi đã nhận thấy hơn nhiều phương pháp sắp xếp số dường như sắp xếp theo 1, 10, 2, 3 ... thay vì dự kiến ​​1, 2, 3, 10 ... Tôi gặp khó khăn khi đưa ra một kịch bản mà tôi sẽ gặp cần phương pháp đầu tiên và, với tư cách là người dùng, tôi cảm thấy thất vọng mỗi khi nhìn thấy nó trong thực tế. Có trường hợp sử dụng hợp pháp cho phong cách thứ nhất so với phong cách thứ hai? Nếu vậy, chúng là gì? Nếu không, làm thế nào mà kiểu sắp xếp đầu tiên ra đời? Tên chính thức cho mỗi phương pháp sắp xếp là gì?


Không phải là một câu trả lời cho câu hỏi của bạn, nhưng nếu bạn phải sắp xếp một danh sách các chuỗi có thể chứa các số, bạn có thể muốn sử dụng thuật toán Alphanum: davekoelle.com/alphanum.html
TehShrike

Nó rất đơn giản. Khi sắp xếp, thuật toán quét từ trái sang phải. Vì vậy, khi nói đến 1 và 5, 5 lớn hơn và nó thực sự đi với EVEN này nếu số 1 thực sự là một phần của số lớn hơn như 134234. Để biết rằng 134234 lớn hơn 5 chúng ta phải thực sự quét vượt qua số đến chữ số cuối cùng (thực tế là chữ số đầu tiên) 4 sau đó hoạt động ngược lại và thấy rằng số đó thực sự là 100000 lớn hơn nhiều so với 5. Vì vậy, loại mù thông thường của bạn không làm điều này vì nó chỉ so sánh ký tự với nhân vật bỏ qua những gì xảy ra sau (hoặc trước) trong so sánh.
Tóm tắt

1
Nếu bạn đọc en.wikipedia.org/wiki/Natural_sort_order thì nó sẽ có ý nghĩa. Theo thứ tự tự nhiên, các chuỗi chữ số được nhóm thành một "ký tự" duy nhất. Không phải về mặt vật lý, chỉ là logic để chúng ta vẫn có thể sắp xếp các so sánh ký tự như trường hợp đầu tiên, nhưng chúng ta sẽ có thể so sánh các chuỗi số nguyên với các chuỗi số nguyên thay vì các ký tự, cho phép chúng ta so sánh giá trị đầy đủ. Tất cả các loại nên theo cách này bởi vì đây là cách con người chúng ta đọc mọi thứ (đối với các số, chúng ta thực sự đọc từ phải sang trái, ngay cả trong một chuỗi từ trái sang phải 1234 = 1000 + 200 + 30 + 4, không phải 4000 + 300 + 20 + 1
Tóm tắt

Câu trả lời:


62

đó là sắp xếp từ vựng , có nghĩa là về cơ bản, ngôn ngữ coi các biến là chuỗi và so sánh từng ký tự ( "200"lớn hơn "19999"bởi vì '2'lớn hơn '1')

để khắc phục điều này bạn có thể

  • đảm bảo rằng các giá trị được coi là số nguyên,

  • thêm vào '0'các chuỗi để tất cả có độ dài bằng nhau (chỉ khả thi khi bạn biết giá trị tối đa).
    Đây là lý do tại sao bạn sẽ thấy số tập trên các tệp phương tiện (S1E01) với số 0 được đặt trước để sắp xếp từ vựng không làm rối tung mọi thứ và cho phép các chương trình chỉ cần phát / hiển thị theo thứ tự bảng chữ cái,

  • hoặc tạo một bộ so sánh tùy chỉnh trước tiên so sánh độ dài của chuỗi (chuỗi ngắn hơn là số nguyên nhỏ hơn) và khi chúng bằng nhau so sánh từ vựng (cẩn thận về việc dẫn đầu '0')


5
+1 cho 'từ điển'. Chưa bao giờ nghe thuật ngữ đó, tôi sẽ chỉ nghĩ đây là cách sắp xếp chữ cái - các số đang được coi là một kiểu chuỗi, như bạn đã nói.
Ẩn danh

3
+1 để thêm vào '0' cho chuỗi. Tôi đã không lập trình cái này, nó có tên các thư mục của tôi và 'Chương 10' đã đến trước 'Chương 2'. Sau đó, tôi đã thực hiện các chương 1-9 được gọi là 01-09 và bây giờ nó được sắp xếp "chính xác".
Marvin

6

Theo thứ tự chữ cái, 1 đến trước 2. Bất cứ khi nào bạn thấy phương thức đầu tiên, không phải vì nó mong muốn, mà bởi vì việc sắp xếp theo thứ tự chữ cái (và xảy ra từ trái sang phải, mỗi lần một ký tự): 1, 2, 10 có ý nghĩa cho bạn nhưng không biết máy tính chỉ biết so sánh chữ cái. Không có cách nào trong loại so sánh đơn giản đó để biết rằng một số theo sau 0 thực sự xuất hiện sau hai.

Khi bạn thấy cách sắp xếp từ và số hỗn hợp xử lý số chính xác, đó là vì cách sắp xếp thông minh hơn và trên hết, thông thường vẫn chỉ hoạt động ở đầu hoặc cuối chuỗi.


4

Đó là kết quả khi bạn sắp xếp các chuỗi số theo thứ tự chữ cái thay vì số.

Kiểu sắp xếp đó là hành vi mặc định của sortlệnh unix chẳng hạn, trừ khi bạn sử dụng --numeric-sorttùy chọn dòng lệnh, điều này cho biết nó cố gắng diễn giải các giá trị số.


4

Những người khác có câu trả lời loại này là gì, nhưng không ai thực sự trả lời câu hỏi của bạn về lý do tại sao bạn nhìn thấy nó. Câu trả lời không thực sự thú vị. Nó thường là một lỗi. Hầu hết các phương pháp sắp xếp sẽ mặc định là cái này hay cái kia và chương trình có thể bất cẩn thay đổi mặc định khi sắp xếp số.


Trong bối cảnh chữ và số hỗn hợp, người dùng có kinh nghiệm sẽ có xu hướng thích sắp xếp từ vựng, bởi vì nó phù hợp và có thể dự đoán được. Mỗi ứng dụng cố gắng "kết hợp" một cách thông minh các cách sắp xếp từ vựng và số sẽ làm khác đi một chút, làm cho loại tiện ích đáng nghi ngờ.
j__m
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.