본문 바로가기
Programming/C

[Algorithm] 삽입정렬

by 춘배씨 2023. 2. 15.

첫 key 값은 [1]번째 인덱스로 하여, 앞쪽(왼쪽)에 있는 정렬과 값을 비교하여 삽입하는 정렬이다.

 

EX)

2,5,3,1,7 [기본 배열]

2,5,3,1,7 

2,3,5,1,7 [교환] 

1,2,3,5,7 [교환] 

1,2,3,5,7

 

#include <stdio.h>
# define LEN 5
 
void insertionSort(int* arr){
  int i, j, key;
 
  for(i=1; i< LEN; i++){
    key = arr[i]; 
    
    // 삽입될 숫자 i번째 정수를 key 변수로 복사
 
    for(j=i-1; j>=0 && arr[j]>key; j--){ 
      arr[j+1] = arr[j];
    }
 // i-1부터 역순으로 조사, j값은 음수가 아니어야 함
 // key 값보다 배열에 있는 값이 크면 j번째를 j+1로 이동 
 
 
    arr[j+1] = key; // j+1에 key 삽입 
  }
}
 
int main(){
    int arr[LEN] = {7,5,1,4,3};
    int i;
    printf("정렬 전 : ");
    for(i=0; i<5; i++){
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    insertionSort(arr);
    printf("정렬 후 : ");
    for(i=0; i<5; i++){
        printf("%d ", arr[i]);
    }
    printf("\n");    
    
    return 0; 
}

시간복잡도 O(n^2)

 

728x90
반응형

'Programming > C' 카테고리의 다른 글

[Algorithm] 버블정렬  (0) 2023.02.02
[Algorithm] 선택정렬  (0) 2023.01.31

댓글