Việc sắp xếp có thể phức tạp, đặc biệt nếu danh sách của bạn
Sau đó, chúng tôi xác định việc thực hiện giao diện
List
chứa các hàm bao đối tượng ( Byte
, Integer
, Short
, Long
, Double
) Float
thay vì các kiểu dữ liệu số nguyên thủy. Tôi khuyên bạn nên sử dụng một phương pháp có thể rất hữu ích để giải quyết các vấn đề đơn giản hoặc trả lời câu hỏi của người phỏng vấn. Đầu tiên, hãy chọn những gì chúng ta sẽ điền vào List
. Trong ví dụ này, tôi sẽ sử dụng danh sách các cạnh của biểu đồ ( Edges
) từ cấu trúc dữ liệu đơn giản Graph
:
// Очень простой класс Edge (рёбро графа)
public class Edge {
public Vertex src;
public Vertex dst;
public double cost;
// создание ребра между двух вершин
Edge(Vertex s, Vertex d, double c) {
src = s;
dst = d;
cost = c;
}
}
// Список рёбер
Edge[] edges = graph.getEdges();
Biểu đồ là gì? Trong toán học rời rạc, đồ thị được định nghĩa là một cặp tập hợp ( Có lẽ, đối với những người không quen với sự trừu tượng toán học, định nghĩa như vậy sẽ không rõ ràng lắm, vì vậy hãy nói đơn giản hơn: Đồ thị là tập hợp các đỉnh và cạnh nối chúng lại với nhau. Một ví dụ điển hình về đồ thị sẽ đưa nó ngay lập tức từ lĩnh vực trừu tượng sang lĩnh vực vật liệu là bản đồ đường ray xe lửa. Các đỉnh của đồ thị như vậy là các trạm . Vâng, các đường dẫn giữa chúng là các cạnh . |
java.util.Comparator
:
class SortByCost implements Comparator<Edge> {
public int compare(Edge a, Edge b) {
if ( a.cost < b.cost ) return -1;
else if ( a.cost == b.cost ) return 0;
else return 1;
}
}
Trong ví dụ này, chúng ta sẽ sắp xếp các cạnh của biểu đồ theo trọng số của chúng hoặc theo khoảng cách từ đỉnh src (nguồn) đến đỉnh dst (đích). Cuối cùng, chúng tôi sử dụng phương pháp tiêu chuẩn java.util.Arrays.sort ()
:
Arrays.sort(edges, new SortByCost())
Bây giờ trang tính chứa đầy các đối tượng của chúng tôi Edges
được sắp xếp theo thứ tự tăng dần (từ nhỏ nhất đến lớn nhất). Tác giả của giải pháp là Ethan Arrowood.
GO TO FULL VERSION