Skip to content

Commit 3308943

Browse files
committed
Merge remote-tracking branch 'origin/PavelTrofimovDev' into PavelLeonovTeamLead
2 parents 670ccf8 + 26f5bda commit 3308943

6 files changed

Lines changed: 128 additions & 49 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ build/
1111
.idea/jarRepositories.xml
1212
.idea/compiler.xml
1313
.idea/libraries/
14+
.idea/misc.xml
1415
*.iws
1516
*.iml
1617
*.ipr

PavelTrofimovReadMe

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Задача:
2+
### Реализация паттерна «Стратегия» для сортировки (Павел Трофимов)
3+
4+
Задачи:
5+
6+
- Реализовать конкретные стратегии сортировки по каждому полю.
7+
- Обеспечить возможность динамического выбора стратегии во время выполнения программы.
8+
- Убедиться, что сортировка корректно работает с любым количеством объектов.
9+
10+
Дополнительное задание 1: дополнительно к основным сортировкам реализовать эти же алгоритмы сортировки таким образом,
11+
что объекты классов будут сортироваться по какому-либо числовому полю: объекты с четными значениями этого поля должны быть отсортированы в натуральном порядке,
12+
а с нечетными – оставаться на исходных позициях.

src/main/java/sorting/BubbleSortingStrategy.java

Lines changed: 0 additions & 37 deletions
This file was deleted.
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package sorting;
2+
3+
import dto.Client;
4+
import java.util.ArrayList;
5+
import java.util.Comparator;
6+
import java.util.List;
7+
8+
public class MergeSortStrategy implements SortingStrategy {
9+
10+
@Override
11+
public void sort(List<Client> clients) {
12+
Comparator<Client> comparator = createDefaultComparator();
13+
sortWithComparator(clients, comparator);
14+
}
15+
16+
public void sortWithComparator(List<Client> clients, Comparator<Client> comparator) {
17+
if (clients == null || clients.size() <= 1) {
18+
return;
19+
}
20+
21+
mergeSort(clients, 0, clients.size() - 1, comparator);
22+
}
23+
24+
@Override
25+
public String getStrategyName() {
26+
return "Merge Sort (сортировка слиянием)";
27+
}
28+
29+
private Comparator<Client> createDefaultComparator() {
30+
return new Comparator<Client>() {
31+
@Override
32+
public int compare(Client client1, Client client2) {
33+
int nameComparison = client1.getName().compareTo(client2.getName());
34+
if (nameComparison != 0) {
35+
return nameComparison;
36+
}
37+
38+
int idComparison = Integer.compare(client1.getIdNumber(), client2.getIdNumber());
39+
if (idComparison != 0) {
40+
return idComparison;
41+
}
42+
43+
return client1.getPhoneNumber().compareTo(client2.getPhoneNumber());
44+
}
45+
};
46+
}
47+
private void mergeSort(List<Client> clients, int left, int right,
48+
Comparator<Client> comparator) {
49+
50+
if (left < right) {
51+
int mid = left + (right - left) / 2;
52+
53+
mergeSort(clients, left, mid, comparator);
54+
55+
mergeSort(clients, mid + 1, right, comparator);
56+
57+
merge(clients, left, mid, right, comparator);
58+
}
59+
}
60+
61+
62+
private void merge(List<Client> clients, int left, int mid, int right,
63+
Comparator<Client> comparator) {
64+
65+
List<Client> temp = new ArrayList<>();
66+
67+
int i = left;
68+
int j = mid + 1;
69+
70+
71+
while (i <= mid && j <= right) {
72+
Client leftClient = clients.get(i);
73+
Client rightClient = clients.get(j);
74+
75+
76+
int comparison = comparator.compare(leftClient, rightClient);
77+
78+
79+
if (comparison <= 0) {
80+
temp.add(leftClient);
81+
i++;
82+
} else {
83+
temp.add(rightClient);
84+
j++;
85+
}
86+
}
87+
88+
while (i <= mid) {
89+
temp.add(clients.get(i));
90+
i++;
91+
}
92+
93+
while (j <= right) {
94+
temp.add(clients.get(j));
95+
j++;
96+
}
97+
98+
for (int k = 0; k < temp.size(); k++) {
99+
clients.set(left + k, temp.get(k));
100+
}
101+
}
102+
}

src/main/java/sorting/Sortable.java

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package sorting;
2+
3+
import dto.Client;
4+
import java.util.Comparator;
5+
import java.util.List;
6+
7+
public interface SortingStrategy {
8+
9+
10+
void sort(List<Client> clients);
11+
void sortWithComparator(List<Client> clients, Comparator<Client> comparator);
12+
String getStrategyName();
13+
}

0 commit comments

Comments
 (0)