본문 바로가기

알고리즘/CLRS

2.1 삽입 정렬

728x90

2. 시작하기

  • 삽입정렬
  • 분할정복 + 병합 알고리즘

2.1 삽입정렬

 

정렬하고자 하는 숫자 = key

 

n의 크기가 작을 경우

삽입정렬 > 병합정렬 

 

루프 불변성

  • 초기조건 : 루프가 첫 번째 반복을 시작하기 전에 루프 불변성이 참이어야 한다.
  • 유지조건 : 루프의 반복이 시작되기 전에 루프 불변성이 참이었다면 다음 반복이 시작되기 전까지도 계속 참이어야 한다.
  • 종료조건 : 루프가 종료될 때 불변식이 알고리즘의 타당성을 보이는데 도움이 될 유용한 특성을 가져야 한다.

 

수학 귀납적 과정과 유사

  • 초기 조건: 불변식
  • 유지 조건 : 불변식 만족
  • 종료 조건 : 불변식 불만족

연습문제

2.1-1

삽입정렬 2.1-1

2.1-2

for j = 2 to A.length
	key = A[j]
    i = j - 1
    
    while i > 0  그리고 A[i] < key
    	A[i + 1] = A[i]
        i = i - 1
    A[i+1] = key

 

2.1-3

A = <a1, a2, ..., an>

def Search(v)
    for i = 1 to A.length:
        if A[i] == v
            break
            return i
    return NIL

초기 조건 : for 문 시작

유지 조건 : i가 1씩 커지면서 유지

종료 조건 : if 조건이 참일 경우 / i가 n까지 도달했을 경우

 

2.1-4

// C를 0 으로 초기화
for i = 1 to (A.length+1)
    C[i] = 0

for i = A.length to 1
    hap = A[i] + B[i]
    if hap == 0
        C[i] = hap
    else if hap == 1 and C[i] == 1
    	C[i] = 0
        C[i+1] = 1
    else if hap == 1 and C[i] == 0
    	C[i] = hap
    else // hap == 2
        C[i + 1] = 1

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

3.1 점근적 표기  (0) 2023.09.01
2.3 알고리즘의 설계  (0) 2023.08.23
2.2 알고리즘 분석  (0) 2023.08.10
1.2 기술로서의 알고리즘  (0) 2023.07.27
1.1 알고리즘  (0) 2023.07.20