การเรียงลำดับอาจยุ่งยาก โดยเฉพาะอย่างยิ่งหากรายการของคุณ
ขั้นแรก เรามาเลือกว่าเราจะเติม
จากนั้นเรากำหนดการใช้งานอินเทอร์เฟซ
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
จะถูกจัดเรียงจากน้อยไปมาก (จากน้อยไปหามาก) ผู้เขียนวิธีแก้ปัญหาคือ Ethan Arrowood
GO TO FULL VERSION