문제 : N개이 숫자가 입력되면 오름차순으로 정렬하여 출력하는 프로그램을 작성
입력 : 정수이다.
배열의 구조분해할당, 선택정렬(선택정렬은 아래에서 알아본다.)
function solution(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr)); // [5, 7, 11, 13, 15, 23]
훨씬 효율적이다!
배열의 구조분해 할당을 쓴 점,
idx 변수를 선언해서 i값을 할당하고 내부 j for문이 끝나고 나서 한 번 두 값의 교환을 하기에,두 값의 교환 횟수를 최소화할 수 있다.
내 코드는 arr[j]<arr[i]가 참일경우 매번 arr[i]와 arr[j]의 값을 교환하기 떄문에,
arr[j]<arr[i]가 참일경우 매번 arr[i]와 arr[j]의 값을 교환한다.
function solution(arr) {
for (let i = 0; i < arr.length - 1; i++) {
idx = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[idx] > arr[j]) idx = j;
}
[arr[i], arr[idx]] = [arr[idx], arr[i]];
}
return arr;
}
let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr)); // [5, 7, 11, 13, 15, 23]