선택 정렬 이란 첫 번째 값을 두 번째 자료부터 마지막 자료까지 차례대로 검색하여 가장 작은
값을 가장 앞에 놓고, 이 후에 계속 반복하여 오름차순을 기준으로 정렬하는 것을 말한다.
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 + " ");
}
}
}