Skip to content

Commit 4be86de

Browse files
authored
Merge pull request #36 from Data-Structure-Study/yoonexample
간단한 정렬 알고리즘 구현
2 parents 03f8ea5 + 6d489cb commit 4be86de

File tree

5 files changed

+189
-0
lines changed

5 files changed

+189
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package sort;
2+
3+
public class BubbleSort implements Sort {
4+
5+
@Override
6+
public void sort(int[] array) {
7+
int length = array.length;
8+
int temp;
9+
for (int i = 0; i < length - 1; i++) {
10+
for (int j = 0; j < length - i - 1; j++) {
11+
if (array[j] > array[j + 1]) {
12+
temp = array[j];
13+
array[j] = array[j + 1];
14+
array[j + 1] = temp;
15+
}
16+
}
17+
}
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package sort;
2+
3+
public class InsertionSort implements Sort {
4+
5+
@Override
6+
public void sort(int[] array) {
7+
int length = array.length;
8+
int insertData;
9+
10+
for (int i = 1; i < length; i++) {
11+
insertData = array[i];
12+
int j;
13+
14+
for (j = i - 1; j >= 0; j--) { // 정렬된 배열의 뒷부분 부터 비교해서 삽입위치 탐색
15+
if (array[j] > insertData) { // 삽입할 데이터가 작으면
16+
array[j + 1] = array[j]; // 위치 변경
17+
} else {
18+
break; // 해당 위치에 삽입되어야 하므로 탈출
19+
}
20+
}
21+
22+
array[j + 1] = insertData;
23+
}
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package sort;
2+
3+
public class SelectionSort implements Sort {
4+
5+
@Override
6+
public void sort(int[] array) {
7+
int length = array.length;
8+
int maxIndex;
9+
int temp;
10+
for (int i = 0; i < length - 1; i++) {
11+
maxIndex = i;
12+
for (int j = i + 1; j < length; j++) { // 최솟값 탐색
13+
if (array[j] < array[maxIndex]) {
14+
maxIndex = j;
15+
}
16+
}
17+
18+
// swap
19+
temp = array[i];
20+
array[i] = array[maxIndex];
21+
array[maxIndex] = temp;
22+
}
23+
}
24+
}
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package sort;
2+
3+
public interface Sort {
4+
5+
void sort(int[] array);
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package sort;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.jupiter.api.AfterEach;
6+
import org.junit.jupiter.api.BeforeEach;
7+
import org.junit.jupiter.api.DisplayName;
8+
import org.junit.jupiter.api.Test;
9+
10+
class SortTest {
11+
12+
long beforeTime;
13+
long afterTime;
14+
15+
@BeforeEach
16+
void setUp() {
17+
beforeTime = System.currentTimeMillis();
18+
}
19+
20+
@AfterEach
21+
void tearDown() {
22+
afterTime = System.currentTimeMillis();
23+
System.out.println("===========>실행시간(ms): " + (afterTime - beforeTime));
24+
}
25+
26+
@Test
27+
@DisplayName("버블_정렬_테스트")
28+
void 버블_정렬_테스트() {
29+
Sort sort = new BubbleSort();
30+
31+
// Repeated Test 사용시 각각 실행시간이 찍혀서 어쩔 수 없이 반복 (1억번)
32+
for (int i = 0; i < 100_000_000; i++) {
33+
int[] actual = {1, 4, 5, 2, 3, 7, 6};
34+
int[] expected = {1, 2, 3, 4, 5, 6, 7};
35+
sort.sort(actual);
36+
37+
assertThat(actual).isEqualTo(expected);
38+
}
39+
}
40+
41+
@Test
42+
@DisplayName("선택_정렬_테스트")
43+
void 선택_정렬_테스트() {
44+
Sort sort = new SelectionSort();
45+
46+
// Repeated Test 사용시 각각 실행시간이 찍혀서 어쩔 수 없이 반복 (1억번)
47+
for (int i = 0; i < 100_000_000; i++) {
48+
int[] actual = {1, 4, 5, 2, 3, 7, 6};
49+
int[] expected = {1, 2, 3, 4, 5, 6, 7};
50+
sort.sort(actual);
51+
52+
assertThat(actual).isEqualTo(expected);
53+
}
54+
}
55+
56+
@Test
57+
@DisplayName("삽입_정렬_테스트")
58+
void 삽입_정렬_테스트() {
59+
Sort sort = new InsertionSort();
60+
61+
// Repeated Test 사용시 각각 실행시간이 찍혀서 어쩔 수 없이 반복 (1억번)
62+
for (int i = 0; i < 100_000_000; i++) {
63+
int[] actual = {1, 4, 5, 2, 3, 7, 6};
64+
int[] expected = {1, 2, 3, 4, 5, 6, 7};
65+
sort.sort(actual);
66+
67+
assertThat(actual).isEqualTo(expected);
68+
}
69+
}
70+
71+
@Test
72+
@DisplayName("힙_정렬_테스트")
73+
void 힙_정렬_테스트() {
74+
Sort sort = new HeapSort();
75+
76+
// Repeated Test 사용시 각각 실행시간이 찍혀서 어쩔 수 없이 반복 (1억번)
77+
for (int i = 0; i < 100_000_000; i++) {
78+
int[] actual = {1, 4, 5, 2, 3, 7, 6};
79+
int[] expected = {1, 2, 3, 4, 5, 6, 7};
80+
sort.sort(actual);
81+
82+
assertThat(actual).isEqualTo(expected);
83+
}
84+
}
85+
86+
@Test
87+
@DisplayName("병합_정렬_테스트")
88+
void 병합_정렬_테스트() {
89+
Sort sort = new MergeSort();
90+
91+
// Repeated Test 사용시 각각 실행시간이 찍혀서 어쩔 수 없이 반복 (1억번)
92+
for (int i = 0; i < 100_000_000; i++) {
93+
int[] actual = {1, 4, 5, 2, 3, 7, 6};
94+
int[] expected = {1, 2, 3, 4, 5, 6, 7};
95+
sort.sort(actual);
96+
97+
assertThat(actual).isEqualTo(expected);
98+
}
99+
}
100+
101+
@Test
102+
@DisplayName("퀵_정렬_테스트")
103+
void 퀵_정렬_테스트() {
104+
Sort sort = new QuickSort();
105+
106+
// Repeated Test 사용시 각각 실행시간이 찍혀서 어쩔 수 없이 반복 (1억번)
107+
for (int i = 0; i < 100_000_000; i++) {
108+
int[] actual = {1, 4, 5, 2, 3, 7, 6};
109+
int[] expected = {1, 2, 3, 4, 5, 6, 7};
110+
sort.sort(actual);
111+
112+
assertThat(actual).isEqualTo(expected);
113+
}
114+
}
115+
}

0 commit comments

Comments
 (0)