알고리즘/알고리즘 정리

1단원. 정렬 - 선택정렬

당글공주 2020. 3. 14. 23:09

정렬이란 항목의 집합을 특정한 순서대로 맞추는 것으로 일반적으로 오름차순이나 내림차순으로 나열 하는 것으로 정렬이란 결국 레코드들을 키 값의 순서로 재배열 하는 것.

 

1) 선택정렬 : 

배열에서 찾은 큰 값을 오른쪽으로 보내는 것을 말한다. 

1회전에서 가장 큰 값을 가장 오른쪽으로 보내기에, 가장 큰 값은 오른쪽 끝에 자리를 잡을 수 있다.

2회전에서 맨 오른쪽 값 제외 가장 큰 값을 찾아 오른쪽 끝에서 두 번째로 보내기에, 두번째 큰 값 또한 자리를 잡을 수 있다.

맨 오른쪽 부터 큰 값을 채워나가는 일을 맨 앞의 값까지 진행하면 정렬이 끝남을 알 수 있다.

 

이를 JAVA 코드로 한번 만들어보도록 하자.

 

public class Solution02 {
      public static void main(String[] args){
          int[] a = {41,31,48,97,9,65,27,29,13,15};  //정렬하고 싶은 배열 

          for(int i=0;i<a.length;i++)                  //회전 수 만큼의 반복 
         {
              int max = 0;                               // 최대값 저장 변수 
              int maxIdx = 0;                           // 배열 최대값의 위치를 담는 변수

             for(int j=0;j<=a.length - 1 - i;j++)    // 각 회전마다 큰 값을 찾는 반복 
             {                                               // 회전마다 맨 끝 값을 채워나가기에 맨 끝까지 비교할 이유가 없음.
                    if(a[j] > max){                       // 최대값과 배열값 비교 
                       max = a[j];                        // 배열값이 최대값보다 크면 최대값을 바꿔준다.
                       maxIdx = j;                       // 최대값이 들어있는 인덱스를 저장.
                   }
              }

             int tmp = a[a.length - 1 - i];           // 회전 끝나면 각 회전에서 끝 값과
            a[a.length - 1 - i] = max;                // 현재 최대값을 바꿔준다. 
            a[maxIdx] = tmp;
         }     

         System.out.println(Arrays.toString(a));

         }
   }