-
4. 삽입 정렬(Insertion Sort)Algorithm 2019. 10. 4. 01:01
#삽입 정렬 알고리즘
a[0]부터 a[i-1]까지 정렬되어 있을 때, a[i]까지 포함하여 정렬하는 알고리즘을 이용
insertion sort #구현
#include <iostream> using namespace std; void insertionsort(int* a, int n); int main(){ int n; cin>>n; int* a= new int[n]; for(int i=0; i<n; i++) cin>>a[i]; insertionsort(a,n); for(int i=0; i<n; i++) cout<<a[i]<<" "; return 0; } void insertionsort(int* a, int n){ int tmp, j; for(int i=1; i<n; i++){ tmp=a[i]; for(j=i-1; j>=0; j--){ if(tmp<a[j]) a[j+1]=a[j]; else break; } a[j+1]=tmp; } }
#시간복잡도 분석
최악의 경우: 역순으로 정렬되어 있는 입력 => n(n-1)/2 => O(n*n)
가장 좋은 경우: 정렬되어 있는 입력 => O(n)
삽입정렬은 정렬되어 있는 경우 아무런 변화가 없기 때문에 데이터가 거의 정렬된 상황에서는 매우 빠르다.
#정리
Best Worst Average Stable? In-Place? 선택정렬 O(n^2) O(n^2) O(n^2) ?? Yes 버블정렬 O(n^2) -> O(n) O(n^2) O(n^2) Yes Yes 삽입정렬 O(n) O(n^2) O(n^2) Yes Yes 'Algorithm' 카테고리의 다른 글
6. 분할과 정복_퀵정렬(Quick Sort) (0) 2019.10.04 5. 분할과 정복_병합정렬(Merge Sort) (0) 2019.10.04 3. 버블 정렬(Bubble Sort) (0) 2019.10.04 2. 선택 정렬(Selection Sort) (0) 2019.10.04 1. 알고리즘 개요 (0) 2019.10.03