만족
[알고리즘] 삽입 정렬(Insertion Sort) 본문
[알고리즘] 삽입 정렬(Insertion Sort)
기타 CS 이론/Algorithm Satisfaction 2018. 1. 13. 20:12n개의 데이터가 있는 배열이 있다고 하자.
2번째 데이터부터 n번째 데이터까지 하나씩 데이터를 선정하여 반복하는데
선정된 데이터의 번쨰(index)가 k번째 데이터라면
k-1번째 데이터부터 1번째 데이터까지 k번째 데이터와 비교하면서,
만약 비교당하는 ?번째 숫자가 k번째 데이터보다 크다면 ?번째 데이터를 오른쪽으로 한 칸씩 옮긴다.
그리고 ?번째에 원래의 k번째에 있던 데이터를 삽입한다.
이 과정이 끝나면 k+1번째를 시작하면서 같은 과정을 n번째 데이터까지 반복한다.
Java Code
public static void insertionSort(int[] array){
for(int i=1; i<array.length; i++){
int target= array[i];
int j= i-1;
while(j>=0 && array[j]> target){
array[j+1]= array[j];
j--;
}
array[j+1]= target;
}
}
Javascript Code
const input = [1, 2, 3, -3, -2, 5, 6, -6];
const solution = () => {
const arr = input;
for (let l = 1; l < arr.length; l++) {
let target = arr[l];
let j = l - 1;
while (j >= 0 && arr[j] > target) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = target;
}
return arr;
};
console.time();
console.log(solution());
console.timeEnd();
Time Complexity
Best Case 일 때, 즉 자료가 이미 정렬되어 있는 상태일 때
n개의 자료가 있을 때 n-1번 비교를 하게 되므로, Time Complexity는 O(n)이 된다.
그러나 Worst Case, 예를 들어 오름차순으로 정렬하기 원하는 데 내림차순으로 정렬되어 있다면
첫 번째 반복에서 1번 비교, 두 번째 비교에서 2번 비교, ... n-1 번째 비교에서 n-1번 비교 하게 되므로
Time Complexity는 O(n^2)가 된다.
'기타 CS 이론 > Algorithm' 카테고리의 다른 글
[알고리즘] 점근적 표기법 (0) | 2018.11.13 |
---|---|
[알고리즘] 이분 탐색(Binaray Search) (3) | 2018.01.16 |
[알고리즘] 퀵 정렬 (Quick Sort) (0) | 2018.01.15 |
[알고리즘] 병합 정렬(Merge Sort) (0) | 2018.01.14 |
[알고리즘] 선택정렬 (Selection Sort) (0) | 2018.01.13 |
Comments