2022/02/16) 2. 버블정렬 [정렬과 그리디, 결정알고리즘]

굥굥이·2022년 2월 16일
0
post-thumbnail

1. 문제

<버블정렬>
: N개의 숫자가 입력되면 오름차순으로 정렬하여 출력하는 프로그램을 작성한다. 정렬하는 방법은 선택정렬이다.

2. 해결 방법

  1. 먼저 버블정렬서로 이웃한 데이터들을 비교하여 가장 큰 데이터가장 뒤로 보내며 정렬하는 방식이다.
  2. 그리하여 처음 외부for문이 돌아갈 때 맨 뒤에 있는 인덱스가 가장 먼저 정해진다. 버블정렬은 for문이 도는 횟수를 조금 유의해서 봐야할 거 같은데, 버블정렬이 가장 큰 데이터를 가장 뒤로 보내는 것이므로 인덱스0번을 제외한 것들은 다 버블정렬로 인해 값이 정해진다. 그러므로 외부 for문은 arr.length-1 까지 돌면 되고, 내부 for문은 arr.length-i-1 까지 돌면 된다.(만약 길이가 5라는 배열이라면, 첫 for문이 돌 때 인덱스 4번의 값이 정해지고, 두 번째 for문이 돌 때 인덱스 3번의 값이 정해지는 이런 식으로 움직이므로. 정리하면 맨 뒤에 값은 정해지므로 매번 맨 뒤의 값을 비교할 필요는 없음.)

3. 정답

        <script>
            function solution(arr){
                let answer=arr;
                for(let i = 0; i < arr.length-1; i ++){ 
                    for(j = 0; j < arr.length-i-1; j++){ 3명에서 버블로 비교를 하면 1-2, 2-32번하면 된다. 여기도 마찬가지. arr.length-1이다. 그러나 외부 for문이 돌수록 마지막 인덱스값이 정해지므로 -i도 해주어야 한다.
                        if(arr[j] > arr[j+1]){
                            [arr[j], arr[j+1]] = [arr[j+1], arr[j]];
                        }
                    }
                }
                return answer;
            }
            let arr=[13, 5, 11, 7, 23, 15];
            console.log(solution(arr));
        </script>

4. 내 코드와 비교 그리고 반성

새로운 개념을 배우는 거라 그냥 문제만 읽고 바로 강의를 들었다. 이렇게 해도 되겠지? 별도 못찍을 때가 있었는데 이제 별은 찍을 수 있으니 발전하긴 한건가..

profile
아자아자 파이띵굥!

0개의 댓글