코딍코딍 2022. 7. 31. 17:22

선택 정렬

처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복한다.

시간 복잡도: O(n^2)

 

 

선택 정렬 동작 과정

0) 정렬할 데이터를 준비

1) 처리되지 않은 데이터 중 가장 작은 값인 '0'을 선택하여 가장 앞의 '7'과 바꾼다.

2) 처리되지 않은 데이터 중 가장 작은 값인 '1'을 선택하여 가장 앞의 '5'과 바꾼다.

3) 처리되지 않은 데이터 중 가장 작은 값인 '2'를 선택하여 가장 앞의 '9'과 바꾼다.

4) 처리되지 않은 데이터 중 가장 작은 값인 '3'을 선택하여 가장 앞의 '7'과 바꾼다.

5) 이러한 과정을 반복하면 다음과 같이 정렬이 된다.

 

 

구현 코드

import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        int n = 10;
        int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};
 
        for (int i = 0; i < n; i++) {
            int min_index = i;  // 가장 작은 원소의 인덱스
 
            for (int j = i + 1; j < n; j++) {
                if (arr[min_index] > arr[j]) {
                    min_index = j;
                }
            }
 
            // swap
            int temp = arr[i];
            arr[i] = arr[min_index];
            arr[min_index] = temp;
        }
 
        for(int i = 0; i < n; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}