Algorithm/자료구조 & 알고리즘
정렬 알고리즘 - 삽입 정렬 (Insertion Sort)
pinevienna
2021. 8. 23. 11:05
삽입 정렬은 선택한 요소를 자신보다 더 앞쪽 정렬된 부분의 알맞은 위치에 삽입하며 정렬해 나간다.
최선의 경우 O(n) / 평균, 최악 O(n^2)의 시간복잡도를 가진다.
1) 정렬이 되지 않은 부분의 가장 첫 번째 요소 selection[i]를 선택하고
2) 앞쪽 정렬된 부분의 알맞은 위치에 삽입한다.
2-1) 정렬된 부분을 한 칸씩 뒤로 밀어내며 이동하고
2-2) selection[i]보다 작은 요소를 만날 때까지
2-3) 혹은 가장 앞에 도달할 때까지 이동하여 삽입한다.
1
2
3
4
5
6
7
8
9
10
11
12
|
void insertionSort(int[] arr){
for(int i = 1 ; i < arr.length ; i ++){
int temp = arr[i]; //selection[i]
int j = i - 1; //정렬된 부분의 마지막
while((j >= 0) && (arr[j] > temp)) {
arr[j+1] = arr[j--];
}
arr[j+1] = temp;
}
}
|
cs |
동일한 값에 대해 기존의 순서가 뒤바뀌지 않는 안정된 정렬!