Skip to content

Commit 04f468a

Browse files
authored
Create note.md
1 parent 76b5bee commit 04f468a

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

삽입정렬/note.md

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
```
2+
package algo;
3+
4+
5+
6+
/**
7+
* 1 10 5 8 7 6 4 3 2 9
8+
* 각 숫자를 적절한 위치에 삽입하면 ?
9+
* O(n^2)
10+
* 그럼 이걸 왜 쓰나 똑같은 효율인데?
11+
* 거의 정렬된 상태라면 매우 빠르기 때문
12+
*
13+
* 1 10 5 8 7 6 4 3 2 9을 보자
14+
* 삽입정렬은 내 앞이 이미 정렬이 되어있다는 것을 가정
15+
* 1부터 보면 1은 앞에 더 이상 들어갈 공간이 없으므로 skip
16+
* _ 1 _ 10 - 10은 앞에 들어갈 공간이 2개가 있는데 1보다 크기 때문에 그대로 위치
17+
* _ 1 _ 10 _ 5 - 5는 앞에 들어갈 공간이 총 3개 1보다 크고 10보다 작기 때문에 1과 10 사이로 삽입
18+
* -> 1 5 10 ....
19+
*
20+
* --------------
21+
*
22+
* 내 생각은 현재 1 5 10 까지 정렬 후 8의 차례일 때 / 나의 위치 = 8
23+
* 8을 움직이는데 이 때 현재 나의 앞에 녀석과 비교하고 나보다 크면 (10이니까) 위치를 바꾼다 -> 1 5 8 10
24+
* 이 후 나의 위치가 한 칸 앞으로 변경되었음을 인지 ★ index--
25+
* 다시 한 칸 앞으로 온 나의 위치에서 동일한 로직 반복 - 앞 녀석과 비교
26+
* 그런데 이 때 5는 나보다 작으니 나의 위치는 바로 현재 여기. 반복종료
27+
* */
28+
public class Main {
29+
public static void main(String[] args) {
30+
int[] ints = {1, 10, 5, 8, 7, 6, 4, 3, 2, 9};
31+
for (int i = 0; i < 10; i++) {
32+
int j = i; // 현재 나의 위치
33+
while (j > 0 && ints[j - 1] > ints[j]) { // j >=0이면 당연히 0보다 앞에 녀석없으니 index에러
34+
int temp = ints[j-1];
35+
ints[j-1] = ints[j];
36+
ints[j] = temp;
37+
j--; //매우 중요 ★
38+
}
39+
}
40+
for (int anInt : ints) {
41+
System.out.println(anInt);
42+
}
43+
44+
}
45+
}
46+
47+
```

0 commit comments

Comments
 (0)