728x90
반응형
삽입 정렬(Insertion Sort)이란?
이미 정렬된 부분의 적절한 위치에
삽입해 가며 정렬하는 방식을
삽입 정렬이라고 합니다.
실제로 삽입 정렬의 데이터 이동 흐름은 위와 같습니다.
여기서의 핵심은
빨간색 데이터를 위로 잠깐 빼놓고,
값을 비교하여 오른쪽으로 계속 당기는 과정이 핵심입니다.
빨간색 데이터와 바로 왼쪽의 데이터를
자리 바꿈으로 정렬을 하는 예제들이 많은데,
그렇게 하면 버블 정렬보다 훨씬 느리답니다 ㅠㅠ
그럼 코드로 확인해보겠습니다.
// 임의 데이터 생성
const makeRandomValueArr = (length) => {
const arr = [];
for (let i = 0; i < length; i++) {
arr.push(i);
}
for (let i = 0; i < arr.length; i++) {
const randomNum = Math.floor(Math.random() * arr.length);
[arr[i], arr[randomNum]] = [arr[randomNum], arr[i]];
}
return arr;
}
// 삽입 정렬
const insertionSort = (array) => {
for(let i = 1; i < array.length-1; i++) {
let curIndex = i - 1;
let curValue = array[i];
while(curIndex >= 0 && array[curIndex] > curValue) {
array[curIndex + 1] = array[curIndex];
curIndex--;
}
array[curIndex + 1] = curValue;
}
return array;
}
const arr = makeRandomValueArr(10);
console.log('arr=', arr);
// [4, 3, 8, 2, 5, 7, 1, 6, 0, 9]
console.time('insertion');
const result = insertionSort(arr);
console.timeEnd('insertion');
console.log('result=', result);
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
핵심은, while 문 안에서 오른쪽으로 값만 당겨주고,
while 문이 종료된 이후
빼놨던 데이터를 삽입시켜주었습니다.
while 문 안에서 바로 curValue와 위치 교환을 하며 정렬을 하게 되면
버블 정렬보다 속도가 훨씬 느려진다는 점
꼭 기억해주세요!
실제로 지금까지 알아본
버블, 선택, 삽입 정렬에 대해서
임의로 1만 개의 배열로 실제
속도 비교를 해보았습니다.
속도 비교를 해보니 위와 같이 나왔네요.
다음 알아볼 정렬부터는
속도가 말도 안 되게 빨라지는데
빨리 알아보고 싶습니다!
반응형
'Development > 알고리즘' 카테고리의 다른 글
[6][알고리즘 - 정렬] 힙정렬(Heap Sort)이란? javascript 구현 (0) | 2021.11.23 |
---|---|
[5][알고리즘 - 정렬] 셸정렬(Shell Sort)이란? javascript 구현 (0) | 2021.11.22 |
[3][알고리즘 - 정렬] 선택정렬(Selection Sort)이란? javascript 구현 (0) | 2021.11.19 |
[2][알고리즘 - 정렬] 버블정렬(Bubble Sort)이란? javascript 구현 (0) | 2021.11.18 |
[1][알고리즘 - 정렬] 정렬이란? 정렬 알고리즘(Sorting Algoritm)? 정렬 이유? (0) | 2021.11.17 |