본문 바로가기
알고리즘

기본적인 알고리즘 - selection sort

by 근즈리얼 2021. 2. 22.
728x90

 selection sort

 

개념

- 배열중에 가장 큰 값을 찾고 맨 끝값과 바꾼다. 이제 맨 끝값은 생각하지 않아도 된다.

 

좀 더 쉽게 계획을 세우면

1. 가장 큰 값을 찾는다.

2. 맨 끝 값과 바꾼다.

3. 맨 끝 값을 제외하고 배열의 나머지 값들로 1,2번을 반복한다.

 

9 5 3 7 6
5 3 7 6 9
5 3 6 7 9
5 3 6 7 9
3 5 6 7 8

빨간색 - 가장 큰 값

노랑색 - 배열의 원소들을 비교할 때 생각하지 않아도 되는 부분

 

시간 복잡도를 생각해보자

 

배열의 원소가 n개일 경우

우선 모든 배열의 값들을 다 비교해야 하므로 n-1번 반복해야한다.

가장 큰 값을 찾아야 하는데 이는 위의 n을 기준으로 달라진다.

따라서 

시간복잡도 T(n) = (n-1) + (n-2) + (n-3) + ..... + 2 + 1 = O(n^2)이다 

 

코드

package sort;
import java.util.Arrays;

public class selection_sort {
    public static void main(String[] args) {
        int[] base = {9,5,3,7,6};
        int max = base[0];
        int index=0;
        for(int i = base.length-1; i>0;i--){
            for(int j = 0;j<=i;j++){
                if(max <= base[j]){
                    index = j;
                    max = base[j];
                }
            }
            base[index] = base[i];
            base[i] = max;
            max = base[0];
        }
        System.out.println(Arrays.toString(base));
    }
}
728x90

'알고리즘' 카테고리의 다른 글

힙(heap)의 용용 : 우선순위 큐(priority queue)  (0) 2021.03.01
Heap_sort(힙 정렬) [java]  (0) 2021.02.28
quick_sort(퀵 정렬) [java]  (0) 2021.02.25
merge_sort(합병 정렬)[java]  (0) 2021.02.24
캐시 교체 알고리즘  (0) 2021.01.23

댓글