본문 바로가기

Basic/자료구조,알고리즘

선택정렬

반응형

1. 선택정렬이란?

정렬 순서상 가장 앞서는 것을 선택해서 가장 왼쪽으로 이동시키고, 원래 그자리에 있던 데이터는 빈자리로 이동하는것.

2. 선택정렬 구현

- 버블정렬과 유사하다

- for문 중첩으로 구현하였다. 

- 안쪽 for문의 반복조건과 바깥쪽 for문의 반복조건에 대한 이해가 정확히 필요하다.

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
31
32
33
public class SelectionSort {
 
    public static void main(String[] args) {
 
        int[] arr = {3241};
 
        SelSort(arr, arr.length);
 
        for(int i=0; i<arr.length; i++) {
            System.out.print(arr[i]);
        }
    }
    static void SelSort(int[] arr, int n)
    {
        int i, j;
        int temp;//임시
        int min;
        
        for(i=0; i<n-1; i++) {
             min = i;
            for(j=i+1; j<n; j++) {// 최소값 탐색
                if(arr[min] > arr[j]) {//선택정렬의 비교연산
                    min = j;
                }
            }
            /* 교환 */
            temp = arr[i];
            arr[i]= arr[min];
            arr[min] = temp;
        }
    }
}
 
cs


3. 성능평가

앞서본 버블정렬과 성능상 큰 차이가 없다.

비교횟수는 다음 반복문 안에 위치한 if문의 실행 횟수를 기준으로 계산할 수 있다.

if(arr[min] > arr[j]) {//선택정렬의 비교연산
                    min = j;
         }

4개의 데이터를 3단계에 걸쳐서 정렬하였다. 비교의 횟수를 더한 결과는 3+2+1 이었다.

이렇듯 버블 정렬의 데이터의 수가 n개일때 진행되는 비교의 횟수는 다음과 같다.

(n-1) + (n-2) + . . . + 2+ 1

그리고 이는 등차수열의 합에 해당하므로 다음과 같이 정리된다.

따라서 선택정렬의 비교연산에 대한 빅-오는 최선의 경우와 최악의 경우 구분없이 O(n^2) 이다.

빅오를 구할때 이동의 횟수는 무시했다.

반응형

'Basic > 자료구조,알고리즘' 카테고리의 다른 글

set  (0) 2020.12.16
삽입정렬  (0) 2019.02.14
정렬-버블정렬  (0) 2019.02.14
우선순위 큐와 힙  (0) 2019.01.09
트리  (0) 2019.01.09