삽입 정렬(Insertion Sort)은 간단하지만 효율적인 정렬 알고리즘 중 하나입니다.
삽입 정렬은 이름에서 알 수 있듯이 각 숫자를 적절한 위치에 "삽입"함으로써 작동합니다.
이 정렬 방식은 주로 작은 데이터 세트에 대해 사용됩니다.
삽입 정렬은 각 반복에서 하나의 데이터 요소를 선택하고, 이미 정렬된 배열 부분에서 해당 요소가 들어갈 올바른 위치를 찾아 그곳에 요소를 삽입함으로써 동작합니다. 이 과정은 모든 데이터 요소가 처리될 때까지 반복됩니다.
function insertionSort(data) {
const length = data.length;
for (let i = 0; i < length - 1; i++) {
for (let j = i + 1; j > 0; j--) {
if (data[j - 1] > data[j]) {
[data[j], data[j - 1]] = [data[j - 1], data[j]];
} else {
break;
}
}
}
return data;
}
let arr = Array.from({ length: 10 }, () => Math.floor(Math.random() * 10));
const result = insertionSort(arr);
console.log(result);
로직
do
swapped = false
for i = 1 to indexOfLastUnsortedElement-1
if leftElement > rightElement
swap(leftElement, rightElement)
swapped = true; ++swapCounter
while swapped
구현1
def insertionSort(data):
for i in range(0, len(data)-1):
for j in range(i+1, 0, -1):
#print('i=', i, 'j=', j, ' j-1=', j-1)
if data[j-1] > data[j]:
data[j], data[j-1] = data[j-1], data[j]
else:
break
return data
# 테스트
import random
data = random.sample(range(100), 100)
print(data)
print(insertionSort(data))
구현2
import random
data = random.sample(range(100), 50)
for i in range(0, len(data)-1):
j = i+1
while j > 0 :
if data[j-1] > data[j]:
data[j-1], data[j] = data[j], data[j-1]
j=j-1
else:
break
print(data)
코드 디버깅 참고: Live Programming Mode - Python Tutor - Visualize Python and JavaScript code