2012. 12. 13. 00:30
선택 정렬 (selection sort)


● 버블 정렬의 자리바꿈 횟수를 줄임으로써 성능을 개선한 알고리즘, 선택정렬의 비교횟수는 버블 정렬과 같다.


● 과정

- 첫 번째 항목을 기준으로 다른 항목들을 비교하여 가장 작은 항목을 기준 항목과 자리바꿈으로써 정렬하는 방법


● 선택정렬 class

/**
 * 선택 정렬
 * @author silverDragon
 *
 */
public class SelectionSort {

	private int arr[];
	
	private int tail;
	
	SelectionSort() {}
	
	public SelectionSort(int[] arr) {
		this.arr = arr;
	}

	public int[] sorting() throws IllegalAccessException {
		
		if ( arr == null)
			throw new IllegalAccessException("array is null");
		
		for ( int fistLoop=0; fistLoop < arr.length ; fistLoop ++ ) {
			tail = fistLoop;
			for ( int secondLoop = fistLoop+1; secondLoop < arr.length ; secondLoop++ )
				if ( arr[secondLoop] < arr[tail])
					tail = secondLoop;
			change(fistLoop, tail);
		}
		
		return arr;
	}


	private void change(int replaceIndex1, int replaceIndex2) {
		int temp = arr[replaceIndex1];
		arr[replaceIndex1] = arr[replaceIndex2];
		arr[replaceIndex2] = temp;
	}

}


● 선택정렬 단위 테스트

public class SelectionSortTest {

	
	@Test
	public void test선택정렬_확인() throws IllegalAccessException {
		
		int[] arr = {5,3,1,2,4};
		
		SelectionSort sort = new SelectionSort(arr);
		
		arr = sort.sorting();
		
		int i = 0;
		assertEquals(1, arr[i++]);
		assertEquals(2, arr[i++]);
		assertEquals(3, arr[i++]);
		assertEquals(4, arr[i++]);
		assertEquals(5, arr[i++]);
		
	}
	
	@Test(expected=IllegalAccessException.class) 
	public void test선택정렬_익셉션체크() throws IllegalAccessException {
		new SelectionSort(null).sorting();
	}

}



ps : 과정을 그림을 그려서 보여주면 이해가 빨라지지만, 그림 그리는 것을 매우 귀찮아 하므로...ㅠ_ㅠ......:)


* 참조자료 : 자바 자료구조론

'자료/알고리즘' 카테고리의 다른 글

계층형 노드 구현  (0) 2016.06.26
정렬 알고리즘 : 버블 정렬 (Bubble Sort)  (0) 2012.12.13
Posted by dragonSilver