선택정렬(selection sort)

0

알고리즘

목록 보기
7/14
  • 선택정렬 -> 오름차순 정렬, n번째 회전에 정렬 상태 구할때 많이 쓰임
    • 주어진 데이터 중 최소값을 찾음
    • 최소값을 맨 앞에 위치한 값과 교환
    • 정렬된 데이터를 제외한 나머지 데이터를 같은 방법으로 정렬
    • 시간복잡도 : O(n^2)
  • 장점
    • 데이터의 양이 적을 때 좋은 성능을 나타냄.
    • 작은 값을 선택하기 위해서 비교는 여러번 수행되지만 교환횟수가 적다.
  • 단점
    • 100개 이상의 자료에 대해서는 속도가 급격히 떨어져 적절히 사용되기 힘들다.

코드

public class Selection {    
public void sort(int[] data) {        
	int size = data.length;       
    int indexMin; //최소값을 가진 데이터의 인덱스 저장 변수        
    int temp;   // 임시 저장 공간인 변수
    	for(int i=0; i<size-1; i++){ // size-1 : 마지막 요소는 자연스럽게 정렬됨            
        	indexMin = i;            
        	for(int j=i+1; j<size; j++){ // i보다 1만큼 큰 j               
        		if(data[indexMin] > data[j] {  // data[i]>data[i+1] 
   					indexMin = j;  // i=n일 때 배열을 처음~끝까지 돌고나서 가장 작은 값이였던 index값을 indexMin에 저장해준다.     
                }
          	} 
            temp = data[indexMin]; // 해당 최솟값을 temp에 넣어줌           
            data[indexMin] = data[i]; // 원래 i에 있던 값은 비어있는 'indexMin'번째에 넣어줌
            data[i] = temp; // i번째에 찾은 최솟값은 배열에 0부터 차례대로 넣어줌
// i++ 되므로, i=0일때 결론지었던 최솟값은 제외하고 i=1일때부터 다시 반복해서 최솟값 찾아서 차례대로 배열에 값을 넣어줌
         }    
	}                 
    public static void main(String[] args) {
    	Selection selection = new Selection();
    	int data[] = {66, 10, 1, 99, 5};
    	selection.sort(data);
    	for(int i=0; i<data.length; i++){            
    		System.out.println("data["+i+"] : " + data[i]);
            }
       }
 }
  • 두 변수의 값을 바꾸려면 변수가 하나 더 필요하다.(temp))

출처

profile
백엔드를 공부하고 있습니다.

0개의 댓글