문제 : N개이 숫자가 입력되면 오름차순으로 정렬하여 출력해라
조건1) 버블정렬으로 정렬 (sort말고)
이중 for문을 사용한다. (앞의 요소와 그 다음 요소를 비교하기 위해 조회한다.)
외부 for문) i=0번째 요소부터 마지막 요소 arr.length-1 전 요소 만큼 내부 j for문 반복힌다.
내부 for문) j=0 번째 요소부터 arr.length-i-1번째 요소까지 조회한다.
=> arr.length-i-1번째 요소까지인 이유는?
=> 이미 비교 교체가 완료된 요소들를 또 비교정렬할 필요없어서 i번째 회전을 할때 마다 비교하는 j번째 요소개수도 줄어드는 것
i번째 요소 j번 부터 j< arr.length-i-1번째 요소까지 다 비교하여
4-1. if문) j가 j+1보다 더 클 경우?
=> j와 j의 위치를 변경한다.
4-2. if문) j가 j+1보다 작은 경우?
=> j와 j+1의 위치를 변경하지 않는다. => continue
j와 모든 j+1를 비교했으면, j=1 부터 다음 요소 j+1을 비교 교체하기를 반복힌다.
i for문 이 종료되면 반복문을 탈출하고 오름차순으로 정렬된 배열을 출력한다.
function solution(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
} else {
continue;
}
}
}
return arr;
}
let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr));
위의 문제와 큰 차이없는, 연습하는 문제!
문제 : N개의 정수를 음의 정수는 앞쪽에 양의정수는 뒷쪽에 있게 정렬해라
입력 : 0은 없고, 음수와 양의 정수가 입력된다.
조건 : 음의 정수는 앞쪽에 양의정수는 뒷쪽에 있어야 한다.
if (arr[j] > 0 && arr[j + 1] < 0) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
};
function solution(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > 0 && arr[j + 1] < 0) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
let arr = [1, 2, 3, -3, -2, 5, 6, -6];
console.log(solution(arr));