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.
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