Сорттоо татаал болушу мүмкүн, өзгөчө, эгер сиздин тизмеңизде баштапкы сандык берorштердин түрлөрүнө караганда ( , , , , , )
Андан кийин интерфейстин ишке ашырылышын аныктайбыз
List
an objectтер камтылса . Мен жөнөкөй маселелерди чечүү же интервьючунун суроосуна жооп берүү үчүн абдан пайдалуу боло турган ыкманы колдонууну сунуштайм. Биринчиден, биз эмнени толтураарыбызды тандап алалы . Бул мисалда мен жөнөкөй маалымат түзүмүндөгү графиктин четтеринин () тизмесин колдоном : 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())
Эми an objectтер менен толтурулган баракчабыз Edges
өсүү тартибинде (кичинеден чоңго чейин) иреттелген. Чечимдин автору Этан Арровуд.
GO TO FULL VERSION