선택 정렬 이란 첫 번째 값을 두 번째 자료부터 마지막 자료까지 차례대로 검색하여 가장 작은

값을 가장 앞에 놓고, 이 후에 계속 반복하여 오름차순을 기준으로 정렬하는 것을 말한다.

5, 8, 2, 4, 3 (N)

final i = 0 (해당 위치 변경), p = 0 (교환 인덱스)
5,8 (0,1) 
5,2 (0,2) p = 2  
2,4 (2,3)
2,3 (3,4)
if(i!=p) 2, 8, 5, 4, 3 (i, p 교환)

final i = 1 (해당 위치 변경), p = 1 (교환 인덱스)
8,5 (1,2) p = 2
5,4 (2,3) p = 3
4,3 (3,4) p = 4
if(i!=p) 2, 3, 5, 4, 8

final i = 2 (해당 위치 변경), p = 2 (교환 인덱스)
5,4 (2,3) p = 3
4,8 (3,4)
if(i!=p) 2, 3, 4, 5, 8

final i = 3 (해당 위치 변경), p = 3 (교환 인덱스)
5,8 (3,4)
if(i!=p) X
package ex03;

public class SelectedEx01 {
    public static void main(String[] args) {
        int[] arr = {5, 8, 2, 4, 3};
        final int N = arr.length;

        //변경해야될 위치
        final int rep = 0;
        //최소값
        int i = rep;
        int min = rep;

        i = i + 1;
        if (arr[min] > arr[i]) {// 5,8,2,4,3 -> min = 2
            min = i;
        }

        i = i + 1;
        if (arr[min] > arr[i]) {
            min = i;
        }

        i = i + 1;
        if (arr[min] > arr[i]) {
            min = i;
        }

        if (rep != min) {
            int temp = arr[rep];
            arr[rep] = arr[min];
            arr[min] = temp;
        }
    }
}
//완성된 선택 정렬 알고리즘
package ex03;

public class SelectedEx01 {
    public static void main(String[] args) {
        int[] arr = {5, 8, 2, 4, 3, 1};
        final int N = arr.length;
        int rep;
        int min;

        for (int j = 0; j < N - 1; j++) {
            rep = j;
            min = j;
						//최솟값을 검색
            for (int i  = rep + 1; i < N; i++) {
                if (arr[min] > arr[i]) {//배열 n번째와 최솟값을 비교
                    min = i;//최솟값이 있는 배열 위치값을 저장
                }
            }
						//rep = 0 min = 최솟값이 있는 배열의 위치값
						//스왑
            if (rep != min) {
                int temp = arr[rep];
                arr[rep] = arr[min];
                arr[min] = temp;
            }
        }

        //전체 출력
        for(int v : arr) {
            System.out.print(v + " ");
        }
    }
}