ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. 선택정렬
    전공 공부/알고리즘 2019. 2. 19. 17:27

    이번 시간에도 신나는 동영상부터 




    출처 : https://ko.wikipedia.org/wiki/%EC%84%A0%ED%83%9D_%EC%A0%95%EB%A0%AC



    선택정렬의 핵심은 (나혼자 이해하기로) 최소값을 '선택'해서 다른 값들과 비교하고, 

    현재 선택한 최소값이 비교값보다 크다면 그 비교값을 다시 최소값으로 선택하는 것


    영상에서 일어나는 일을 좀 더 소스 친화적으로 풀어보자면 


    [첫번째 루프]



    [두번째 루프]


    [세번째 루프]

    이런 식으로 진행이 된다.


    이걸 자바 소스로 풀어내면

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class SelectionSort {
     
        public SelectionSort(){}
        
        public String sort(int[] target){
            String after = "";
            int min, temp;
            
            for(int i = 0; i < target.length; i++){
                min = i;
                
                for(int j = i+1; j < target.length; j++){
                    if(target[j] < target[min])
                        min = j;    
                }
                
                temp = target[i];
                target[i] = target[min];
                target[min] = temp;
                
            }
            
            for(int i = 0; i < target.length; i++){
                after += target[i] + "\t";
            }
            
            return after;
        } 
        
    }
    cs


    버블정렬과 다른 점이라면 내부 for문에서 비교하면서 바로 값끼리 교환하지 않고

    내부 for문을 빠져 나와서 다음 루프를 돌기 전에 새로 선택된 최소값의 위치와 현재 선택된 원소의 위치를 교환해준다는 것


    따라서 복잡도는 버블정렬과 같이 O(n^2)가 나오지만 실제로는 버블정렬보다는 쪼금 더 효율적이라고 할 수 있다.



    '전공 공부 > 알고리즘' 카테고리의 다른 글

    3. 삽입정렬  (0) 2019.03.12
    1. 버블 정렬  (0) 2019.02.15

    댓글

Designed by Tistory.