Skip to content

Commit 26f5bda

Browse files
committed
Change BubbleSort on MergeSort and Sortable on SortingStrategy
1 parent f83cf37 commit 26f5bda

6 files changed

Lines changed: 116 additions & 56 deletions

File tree

.gitignore

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

.idea/misc.xml

Lines changed: 0 additions & 7 deletions
This file was deleted.

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)