המיון יכול להיות מסובך, במיוחד אם הרשימה שלך
לאחר מכן אנו מגדירים את יישום הממשק
List
מכילה עטיפות אובייקטים ( Byte
, Integer
, Short
, Long
, Double
, Float
) ולא סוגי נתונים מספריים פרימיטיביים. אני מציע להשתמש בשיטה שיכולה להיות שימושית מאוד לפתרון בעיות פשוטות או מענה לשאלת מראיין. ראשית, בואו נבחר מה נמלא שלנו List
. בדוגמה זו אשתמש ברשימה של קצוות גרפים ( Edges
) ממבנה נתונים פשוט 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();
מהו גרף? במתמטיקה בדידה, גרף מוגדר כזוג קבוצות ( כנראה, למי שלא רגיל להפשטות מתמטיות, הגדרה כזו לא תהיה ברורה במיוחד, אז בוא נגיד את זה בצורה פשוטה יותר: גרף הוא אוסף של קודקודים וקצוות המחברים ביניהם. דוגמה טובה לגרף שייקח אותו מיד מתחום ההפשטה לתחום החומר היא מפת פסי רכבת. הקודקודים של גרף כזה הם תחנות . ובכן, השבילים ביניהם הם קצוות . |
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;
}
}
בדוגמה זו, נמיין את קצוות הגרף לפי משקלם, או לפי המרחק מהקודקוד src (מקור) לקודקוד dst (יעד). לבסוף, אנו משתמשים בשיטה הסטנדרטית java.util.Arrays.sort ()
:
Arrays.sort(edges, new SortByCost())
כעת הגיליון שלנו המלא בחפצים Edges
ממוין בסדר עולה (מהקטן לגדול ביותר). מחבר הפתרון הוא איתן ארוווד.
GO TO FULL VERSION