2014-06-11 15 views
7

Arrays sắp xếp các kiểu dữ liệu nguyên thủy bằng cách sử dụng phương thức DualPivotQuicksort, và các loại phức tạp riêng biệt - sử dụng sắp xếp hợp nhất. (chèn-sắp xếp nếu kích thước đầu vào là nhỏ).Arrays.sort() - hai chiến lược khác nhau cho các kiểu dữ liệu nguyên thủy và phức tạp được sắp xếp

DualPivotQuicksort đang sử dụng sắp xếp hợp nhất vẫn còn trên kích thước đầu vào lớn, tuy nhiên, nó đang sử dụng tính năng kép nhanh trên một loạt các kích thước đầu vào nhỏ hơn.

Điều tôi tự hỏi là-- tại sao sự khác biệt này trong chiến lược phân loại các loại nguyên thủy và không nguyên thủy?

Hiệu suất của thuật toán phụ thuộc đáng kể vào kích thước đầu vào-- không phải loại dữ liệu. Gọi compareTo() thay vì so sánh đồng bằng trên nguyên thủy (>, <, ==) không ghi thêm dung lượng trong bộ nhớ (và do đó không làm chậm hiệu suất thời gian tuyệt đối do bộ nhớ) đáng kể trong thời gian chạy.

Tại sao các phương pháp Arrays.sort() sử dụng các chiến lược sắp xếp khác nhau cho các loại dữ liệu nguyên thủy, và cho các loại dữ liệu phức tạp?

TIA.

+0

Có thể thực tế là so sánh đối tượng có thể sẽ đắt hơn đáng kể so với so sánh nguyên thủy có thể đã đóng một vai trò. Tôi không quen thuộc với Timsort và cả hai trục xoay nhanh, vì vậy tôi không thể nói chắc chắn. Javadoc không đề cập đến một lợi thế so sánh số so với Timsort, nhưng nhìn thấy như không có điều gì cho các loại khác, tôi thực sự không thể rút ra bất kỳ kết luận nào. – awksp

Trả lời

9

Vì sắp xếp loại tham chiếu được đảm bảo là stable, trong khi sắp xếp nguyên thủy không cần (vì vậy nhanh, một thuật toán sắp xếp không ổn định, có thể được sử dụng; sắp xếp hợp nhất mặt khác thực tế là ổn định). Cũng lưu ý rằng quicksort is generally more optimal than mergesort (xem this), điều này giải thích tại sao nó được tận dụng khi phân loại nguyên thủy.

Từ Arrays.sort:

loại này là đảm bảo được ổn định : yếu tố bình đẳng sẽ không được sắp xếp lại như một kết quả của sự phân loại.

+2

+1. Giải thích đơn giản hơn nhiều so với việc pha chế lộn xộn trong đầu tôi. – awksp

Các vấn đề liên quan