Java/알고리즘
삽입 정렬(Insertion Sort)
heoheos
2023. 3. 27. 19:42
동빈나 실전 알고리즘 강좌(Algorithm Programming Tutorial) 참고
https://www.youtube.com/playlist?list=PLRx0vPvlEmdDHxCvAQS1_6XV4deOwfVrz
실전 알고리즘 강좌 (Algorithm Programming Tutorial)
www.youtube.com
삽입 정렬(Insertion Sort)
각 숫자를 적절한 위치에 삽입하자
다른 정렬방식들은 무조건 위치를 바꾸는 방식이었다면 삽입 정렬은 필요할 때만 위치를 바꿈
시간 복잡도 : O(N^2)
시간 복잡도는 선택 정렬, 버블 정렬과 같으나 거의 정렬된 상태라면 삽입 정렬이 훨씬 효율적으로 동작
만약 1 5 10 8 ... 의 숫자가 있고, 8의 위치를 결정할 경우라면 8은 _1_5_10_ 총 4 곳에 들어갈 수 있으며 5와 10 사이에 결과적으로 들어가게 된다. 여기서 8 앞의 원소들은 이미 코드를 수행하면서 이미 정렬된 상태이므로 8만 잘 끼워넣으면 됨. 8의 적절할 위치는 왼쪽값이 자신보다 작을 경우를 만날 때까지(j--) 반복문을 수행하면서 자리를 결정하면 됨
package algorithmProgramming;
public class Insertion {
public static void main(String[] args) {
int[] numbers = { 1, 10, 5, 8, 7, 6, 4, 3, 2, 9 }; // 1 5 8 10 7 6 ...
for (int i = 0; i < numbers.length - 1; i++) {
int j = i;
while (j >= 0 && numbers[j] > numbers[j + 1]) {
int tmp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = tmp;
j--;
}
}
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + " ");
}
}
}