선택정렬이란?
제자리 정렬 알고리즘의 하나로, 전체 원소들 중에서 기준 위치에 맞는 원소를 선택하여 자리를 교환하는 방식
1. 주어진 원소중 최소값을 찾는다.
2. 그 값을 첫 번째 원소와 교환 한다.
3. 그 다음 작은 원소를 찾아 다음 위치의 원소와 비교하여 교환한다.
위 과정을 반복하는 것이 선택정렬 입니다.
출처 - http://ko.wikipedia.org/wiki/%EC%84%A0%ED%83%9D_%EC%A0%95%EB%A0%AC
수도코드
예를들어, {80, 6, 2, 3, 1} 원소를 정렬하고자 하는 경우,
(기준위치 를 빨간색, 최소값 위치 파란색으로 표시)
1단계
80 6 2 3 1
정렬후 : 1 6 2 3 80
2단계
1 6 2 3 80
정렬후 : 1 2 6 3 80
3단계
1 2 6 3 80
정렬후 : 1 2 3 6 80
이렇게 기준위치와 최소값을 교체하는 방식으로 선택정렬이 완성 됩니다.
반대로, 내림차순의 경우 큰원소를 찾아 교환하면 되겠죠?
아래 자바코드를 구현해보면 아래와 같습니다.
자바코드
ASC (오름차순)
-
public static int[] SelectionSortAsc(int[] items) {
-
int indexMin, temp;
-
for (int i=0;i<items.length-1;i++) {
-
indexMin = i;
-
for(int j=i+1;j<items.length;j++) {
-
//선택원소 보다 작은 원소위치 찾기
-
if (items[j] < items[indexMin]) {
-
indexMin = j;
-
}
-
}
-
temp = items[indexMin]; //최소값 임시 저장
-
items[indexMin] = items[i]; //최소값 위치에 선택위치의 원소와 교환
-
items[i] = temp; //선택위치에 최소값 교환
-
}
-
return items;
-
}
DESC (내림차순)
-
public static int[] SelectionSortDesc(int[] items) {
-
int indexMax, temp;
-
for (int i=0;i<items.length-1;i++) {
-
indexMax = i;
-
for(int j=i+1;j<items.length;j++) {
-
//선택원소 보다 큰 원소위치 찾기
-
if (items[j] > items[indexMax]) {
-
indexMax = j;
-
}
-
}
-
temp = items[indexMax]; //최대값 임시 저장
-
items[indexMax] = items[i]; //최대값 위치에 선택위치의 원소와 교환
-
items[i] = temp; //선택위치에 최대값 교환
-
}
-
return items;
-
}
실행결과
'프로그래밍 > 자료구조/알고리즘' 카테고리의 다른 글
자바로 구현하는 이진탐색 (BinarySearch) 알고리즘 (0) | 2014.10.16 |
---|---|
자바로 구현하는 퀵정렬 (Quick Sort) 알고리즘 (2) | 2014.09.01 |
자바로 구현하는 버블소트 (Bubble sort) 알고리즘 (1) | 2014.08.18 |
자바로 구현하는 링크드 리스트 (Singley LinkedList) (0) | 2014.07.22 |
문자열 뒤집기 (0) | 2011.10.15 |