정렬 알고리즘은 n개의 숫자가 입력으로 주어졌을 때
이를 사용자가 지정한 기준에 맞게 정렬하여 출력하는 알고리즘

INSRTION-SORT(A)
for j = 2 to A.length
key = A[j]
// Insert A[j] into the sorted sequence A[1..j-1]
i = j-1
while i>0 and A[i] > key
A[i+1] = A[i]
i = i-1
A[i+1] = key
루프 불변성(Loop Invariant)이란?
루프 불변성(Loop Invarient)이란 반복문이 실행될 때마다 항상 참(True)인 조건을 의미한다.
이 개념은 정렬 알고리즘의 정확성을 증명할 때 유용하게 사용한다.
알고리즘의 정당성을 위한 3단계
i = 1일 때, 부분 배열 A[0]은 길이가 1이므로 이미 정렬되어 있다 즉, 루프 불변성이 성립한다.A[i]를 적절한 위치에 삽입하면, A[0]부터 A[i]까지도 정렬된 상태가 유지된다. 즉, 루프 불변성이 성립한다.i = n이 되면, A[0]부터 A[n-1]까지 정렬되어 있으므로 따라서 A 전체가 정렬되었음을 보장할 수 있다.The time of Insertion Sort
times은 코드에서 최대로 실행될 수 있는 횟수이다.n번, 이중 반복문은 단일 반복문 안에서 한번 더 반복하는 것이므로 로 표현한다.False라면 실행을 하지 않으므로 n-1로 표현한다.