본문 바로가기
자료구조

자바 선택정렬 / java select sort

by 자유코딩 2017. 9. 28.

이번 글에서는 선택정렬에 대해서 알아보도록 하겠습니다

 

선택정렬

배열 중에서 최소값을 찾아서 첫번째 위치의 값과 자리를 바꾼다

첫번째를 제외하고 최소값을 찾아서 두번째 위치의 값과 자리를 바꾼다

첫번째, 두번째를 제외하고 최소값을 찾아서 세번째 위치의 값과 자리를 바꾼다

 

3 2 5 4 1 : 최소값이 1 -> 위치를 첫번째랑 바꾼다

1 2 5 4 3 : 첫번째를 제외한 최소 값 2 -> 그대로

1 2 5 4 3 : 첫번째, 두번째 제외 최소값 3 -> 위치를 세번째랑 바꾼다

1 2 3 4 5 : 정렬 완료

코드와 설명

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
package p_Elec;
 
public class SelectionSort {
    public static void main(String[] args) {
        int[] sort = {3,2,5,4,1};
        int temp=0;
        int indexControl=0;
        System.out.print(sort[0]+" "+sort[1]+" "+sort[2]+" "+sort[3]+" "+sort[4]);
        System.out.println(" ");
        for (int i = 0; i < 4; i++) { //i를 0부터 탐색한다.
            indexControl = i;//indexControl에 i를 대입한다
            for (int j = i+1; j < 5; j++) {//j를 i=0이니까 1을 더해서 1부터 탐색한다
                //0번째 1번째 , 1번째 2번째 , 2번째 3번째 , 3번째 4번째 , 
                if(sort[indexControl]>sort[j]) {//if문에서 0번째 1번째 , 1번째 2번째 , 2번째 3번째 , 3번째 4번째를 비교한다
                    indexControl = j;//앞의 수가 뒤의 수보다 클때마다 뒤의 인덱스를 indexcontrol에 대입한다
                    //i는 0일때 j는 1부터 4까지 증가한다
                    //sort[j]가 작을때 마다 작은 sort[j]의 인덱스 j를 indexControl에 저장한다
                    //이렇게 하면 제일 작은 수 sort[indexControl]이 구해진다
                }
            }
            temp = sort[indexControl];//앞서 안쪽 for문에서 구한 sort[indexControl]최소 값을 temp에 대입한다
            sort[indexControl] = sort[i];//아직 첫번째 안쪽 for문을 수행했다면 i의 값은 0이다.
            //즉 sort[i]첫번째 값 3을 최소값 sort[indexControl]위치에 놓는다
            sort[i] = temp;//temp를 첫번째 값 sort[i]에 놓는다.최소 값을 sort[i]에 놓는다
        }
        System.out.print(sort[0]+" "+sort[1]+" "+sort[2]+" "+sort[3]+" "+sort[4]);
    }
}
cs

 

왼쪽은 if 문의 괄호 안에서 sort[indexControl]입니다.

오른쪽의 바뀌는 숫자들은 j로 컨트롤 되는 sort[j]입니다.

 

3이 2보다 큽니다

 

그래서 2가 들어있는 인덱스 j를 3이 들어있는 인덱스 indexControl에 대입합니다

 

 

 

 

 

 

 

 

그러면 이제 왼쪽의 sort[indexControl]이 2가 됩니다

 

지금 반복문 안에 있는 상황입니다

그래서 j에 대해서도 ++연산이 진행됩니다

sort[j] 는 이제 5가 됩니다

5는 2보다 크기 때문에 if문 안의 코드를 실행하지 않고 다음 인덱스로 건너 뜁니다

 

 

 

 

4도 2보다 크기 때문에 다음 인덱스로 건너 뜁니다.

 

j가 1증가 합니다

 

 

 

마지막 1은 sort[4]에 위치합니다

1과 2를 인덱스를 바꿔줍니다

 

 

 

sort[indexControl]이 1이 되었습니다

 

 

i의 값이 증가하며 다음 인덱스에 대해서도 같은 동작을 수행합니다

 

다른 풀이

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
package p_Elec;
 
public class SelectionSort {
    public static void main(String[] args) {
        int[] sort = {3,2,5,4,1};
        int minVal;//최소 값
        int minPos;//최소 값 위치를 저장 할 변수
        int indexControl=0;//최소 값 위치
        System.out.print(sort[0]+" "+sort[1]+" "+sort[2]+" "+sort[3]+" "+sort[4]);
        System.out.println(" ");
        for (int j = 0; j < sort.length; j++) {
            minVal = sort[j];//최소 값 초기 설정
            minPos = j;//최소 값
            for (int i = j+1; i < sort.length; i++) {
                if(minVal > sort[i]) {//최소값과 현재 위치의 값을 비교
                    //현재 위치의 값이 작으면
                    minVal = sort[i];//현재 값을 최소 값으로
                    minPos = i;//그 인덱스를 최소위치로
                }
            }
            //최소 값이랑 0번 인덱스의 값을 바꾼다
            int temp = sort[minPos];//최소 값을 임시변수 temp에 저장한다
            sort[minPos] = sort[j];
            sort[j] = minVal;
        }
        System.out.print(sort[0]+" "+sort[1]+" "+sort[2]+" "+sort[3]+" "+sort[4]);        
    }
}
cs

 

설명이 부족하시진 않으셨나요? jswoo030@gmail.com 으로 질문해주시면 빠른 답변을 받으실 수 있습니다

 

공부하시는데 많은 도움이 되셨기를 바랍니다

'자료구조' 카테고리의 다른 글

자바 Arraylist / java arraylist  (0) 2017.10.30
자바 연결 리스트 / java Linked List  (0) 2017.10.24
스택 / Stack  (0) 2017.10.19

댓글