티스토리 뷰
삽입정렬이란 삽입하여 정렬하는 것이다.
입력 :
n개의 숫자
출력 :
n개의 숫자가 점점 커지는 순서로 정렬 , 가장 큰 숫자가 가장 오른쪽으로 간다. ( 오름차순 )
무엇을 삽입할 것인가?
Key 값과 정렬된 리스트가 주어졌을 때, Key 값을 정렬된 리스트의 알맞은 위치에 삽입
Key가 3이고 정렬된 배열이 <1,2,4,5,6>일 때
1과 2 사이에 3을 넣음으로써
<1,2,3,4,5,6> 으로 정렬함.
정렬을 시작할 때 처음 값 한개는 미리 넣어둔다.
두번째 숫자부터는 Key 값으로 생각을 하고 삽입한다.
즉 <3,2,4,5,1,6> 일 때
<3>
<2,3>
<2,3,4>
<2,3,4,5>
<1,2,3,4,5>
<1,2,3,4,5,6>
이렇게 들어간다고 생각하면 된다.
과정은
만약 삽입할 key가 가장크면 맨뒤에 남고,
아니면 그 앞자리와 자리를 바꿈.
이걸 앞자리보다 key가 클때까지 반복하면
자기자리에서 멈추게 된다.
수행시간을 분석해보면,
몇번 째 자리가 key값이 들어가야 하는지 계속해서 확인해야한다.
그래서 정렬된 , 정렬되고 있는 배열의 숫자와 key값에 따라서 몇번을 확인하게 될지 알기 어렵다.
즉 입력의 크기가 동일하더라도
최선의 경우와 최악의 경우, 평균의 경우의 수행시간이 다르다.
이미 정렬되어 있는 정렬이라면 : n
반대로 정렬되어 있는 정렬이라면: O(n^2)
/// 다른 삽입, 선택, 버블 등은 n^2이지만 삽입은 상황에 따라 더 빠를 수 있다는 장점이 있다. ///
삽입정렬 코드 in c
#include <stdio.h>
int main(void) {
int i, j, temp;
int array[10] = {4, 5, 7, 2, 8, 1, 9, 3, 6, 10};
for(i=0; i< 9; i++){ // 9번 반복한다.
j = i;//
while(array[j] > array[j+1]){ // array[0]>array[1] 만약 맨 앞자리보다 2번째가 작으면
temp = array[j];
array[j] = array[j+1]; // 2번째와 앞자리를 바꿔준다.
array[j+1] = temp; // 앞자리에는 가장 작은수가 들어가짐.
j--; // 이걸 뒷자리부터 계속해서 비교해서 자기자리에 찾아 들어간다.
//들어가게 되면 앞자리보다 뒷자리가 크므로 while 탈출
}
} //9번 반복
// 결과 확인 for(i=0 ; i<10; i++){
printf("%d ", array[i]);
}
return 0;
}
2020/03/10 - [Study/소프트웨어] - 컴퓨터 알고리즘 초급 #1 ( 컴퓨터 알고리즘 개요 )
2020/03/10 - [Study/소프트웨어] - 컴퓨터 알고리즘 초급 #2 ( 선택정렬 in c )
'Study > 소프트웨어' 카테고리의 다른 글
컴퓨터 알고리즘 초급 #5 ( 힙정렬 in c ) (0) | 2020.03.20 |
---|---|
컴퓨터 알고리즘 초급 #4 ( 합병정렬 in c ) (0) | 2020.03.20 |
컴퓨터 알고리즘 초급 #2 ( 선택정렬 in c ) (0) | 2020.03.10 |
컴퓨터 알고리즘 초급 #1 ( 컴퓨터 알고리즘 개요 ) (0) | 2020.03.10 |
리눅스에서 python3 crypto 라이브러리 사용하기 (AES, SHA256 암호화 라이브러리) (0) | 2020.02.28 |