meong_j
기록하는 습관.
meong_j
전체 방문자
오늘
어제
  • 분류 전체보기 (176)
    • 개인 공부 정리 (0)
    • 서버 운영 (37)
      • Linux (36)
    • Frontend (11)
      • Vue.js (10)
    • Backend (70)
      • Java (4)
      • Python (22)
      • Django (38)
      • Spring (6)
    • Database (5)
      • Oracle (4)
      • MySQL (1)
      • MariaDB (0)
    • Android (14)
      • Kotlin (6)
    • 배포 (9)
      • Docker (8)
      • AWS (1)
    • IT_study (29)
      • Coding test (17)
      • 알고리즘 (5)
      • 스터디 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

인기 글

반응형

태그

  • 테크커리어
  • 개발자도서
  • 리눅스인증
  • 코틀린자료형
  • DHCP
  • 중첩라우트
  • 안드로이드adaptor
  • docker
  • Proxy
  • django
  • 리눅스방화벽
  • 배포인프라
  • dp #알고리즘
  • 이차원배열정렬
  • Kotlin
  • gabagecollecter
  • SASS Variables
  • dockersecret
  • cpu사용률
  • router-link

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.
meong_j

기록하는 습관.

IT_study/알고리즘

[알고리즘] 삽입 정렬(Insertion sort) 의 개념 with c++

2022. 1. 2. 02:56
728x90
반응형

삽입 정렬이란 자료 배열의 모든 요소를 앞에서 부터 비교하고자 하는 타겟값(tmp)과 정렬된 값을 비교하여 자신의 위치를 찾아 삽입하면서 정렬해나가는 알고리즘이다.

매번 비교할 때마다 앞 부분에 해당하는 범위 모두 타겟값과 비교하여 해당 원소를 삽입할 수 있는 위치를 찾아 배열 위치에 넣는다. 

 

 

 

📌정렬 과정(오름차순)

 

1. 2번째 원소부터 비교 시작한다

2. 이전 위치에 있는 원소들과 타겟이 되는 원소들을 비교한다(타켓 원소는 임시변수에 넣는다)

3. 타겟 원소가 이전 위치에 있던 원소보다 작다면 위치를 바꾼다

4. 이전 데이터도 차례대로 비교하며 정렬해나간다

5. 이 방법을 반복해서 정렬한다

 

 

삽입정렬 예시(wikipedia)

 

 

📌특징

  • 구현이 간단하다
  • 배열이 길어질수록 효율이 떨어진다
  • 선택 정렬이나 버블 정렬과 같은 O(n^2) 알고리즘에 비해 빠르고 안정 정렬이다
  • 데이터를 비교하면서 찾아서 비교정렬이다
  • 추가적인 공간을 필요하지 않기 때문에 제자리 정렬(in-place-sort)이다
  • 데이터를 서로 교환(swap)하면서 임시변수(tmp)가 필요하다

 

 

 

 

 

 

 

 

📌시간 복잡도

- 최선일 경우

  • 이동없이 1번씩 비교할 경우
  • T(n) = O(n)

- 최악일 경우

  • 비교할 때마다 i번씩 비교
  • 각 단계마다 원소 이동
  • 1+2+3+4+...+(n-1) = n(n-1)/2 번 비교
  • T(n) = O(n^2)

 

 

📌삽입 정렬 c++ 코드 구현

#include<stdio.h>

using namespace std;

int main(){

	// 삽입정렬 
	int a[100], n, tmp, i, j;
	scanf("%d", &n);
	for(i=0; i<n; i++){
		scanf("%d", &a[i]);
	} 
	for(i=1; i<n; i++){
		tmp=a[i];
		for(j=i-1; j>=0; j--){
			if(a[j]>tmp) a[j+1]=a[j];
			else break;
		}
		a[j+1]=tmp; 
	}
	
	for(i=0; i<n; i++){
		printf("%d ",&a[i]);
	}	
	
	return 0;	
    
}

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'IT_study > 알고리즘' 카테고리의 다른 글

[Algorithm] DP(Dynamic Programming) 동적계획법  (0) 2022.07.09
[알고리즘] 병합정렬(Merge Sort)의 개념 with c++  (0) 2022.01.02
[알고리즘] 버블 정렬(Bubble sort)의 개념 with c++  (0) 2021.12.30
[알고리즘] 선택 정렬(Selection Sort) 의 개념 with c++  (0) 2021.12.30
    'IT_study/알고리즘' 카테고리의 다른 글
    • [Algorithm] DP(Dynamic Programming) 동적계획법
    • [알고리즘] 병합정렬(Merge Sort)의 개념 with c++
    • [알고리즘] 버블 정렬(Bubble sort)의 개념 with c++
    • [알고리즘] 선택 정렬(Selection Sort) 의 개념 with c++
    meong_j
    meong_j
    #it #개발일기 #개발공부 #개발자 #백앤드 #생각정리 #시간은 실력에 비례한다 #뭐든지 꾸준히 열심히 #오늘의 내가 내일의 나를 만든다

    티스토리툴바