삽입 정렬은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다. <위키백과>
//오름차순 정렬을 삽입 정렬 방식을 이용해 구현해보고자 한다.
var insertionSort = function(array) {
let j;
for(let i = 1; i < array.length; i++){ //비교를 시작할 두 번째 요소 지정
let currentElement = array[i] //새로운 변수에 비교할 값을 담는다.
//이미 정렬된 배열과 비교해야 하므로, 비교할 값보다는 idx가 낮아야 할 것이다.
for(j = i-1; j >= 0; j--){
//비교할 값보다 앞선 값이 더 크면
if(currentElement< array[j]){
//오른쪽에 할당한다.
array[j+1] = array[j]
//비교할 값보다 작으면(잘 정렬이 되어있으면), for문을 나간다.
}else{
break;
}
}
//남아 있는 빈칸에 비교할 값을 담는다.
array[j+1] = currentElement
}
return array;
};
var insertionSort = function(array) {
var i = 1, j, temp;
for (i; i < array.length; i++) {
temp = array[i]; // 새로운 숫자를 선택함
for (j = i - 1; j >= 0 && temp < array[j]; j--) { // 선택한 숫자를 이미 정렬된 숫자들과 비교하며 넣을 위치를 찾는 과정, 선택한 숫자가 정렬된 숫자보다 작으면
array[j + 1] = array[j]; // 한 칸씩 뒤로 밀어낸다
}
array[j + 1] = temp; // 마지막 빈 칸에 선택한 숫자를 넣어준다.
}
return array;
};
insertionSort([5, 6, 1, 2, 4, 3]); // [1, 2, 3, 4, 5, 6]
//for문 조건식 안에 비교할 조건문을 넣어버리면,
//그것을 만족하지 못했을 때 곧바로 반복문이 끝나버리기 때문에
//내가 구현한 코드에서처럼 break를 따로 써줄 필요가 없었다.