선택 정렬
잘못된 위치에 들어가 있는 원소를 찾아
그것을 올바른 위치로 옮겨 주는 원소 교환(exchange) 사용하여 정렬 수행
작은 키와 매우 큰 레코드를 가지는 화일을 정렬하는데 적합
실행시간은 입력자료순서에 민감하지 않음
제자리 정렬
불안정적인 알고리즘
N개의 원소일때,
비교 N-1번 / 교환 0번 ~ 1번
한번 정렬을 하고 난 후,
비교 N-2번 / 교환 0번 ~ 1번
두번 정렬을 하고 난 후
비교 N-3번 / 교환 0번 ~ 1번
..
..
..
전체 비교 횟수 N(N-1)/2 => 시간복잡도 O(N^2)
선택정렬 알고리즘을 C++로 구현한 경우
void SelectionSort(int a[], int n) { int i, j, min; for ( i = 1; i < n; i++) { min = i; for ( j = i+1; j <= n; j++) if ( a[j] < a[min]) min = j; swap(a, min, i); } }
void swap(int a[], int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } |
선택 정렬 알고리즘
SelectionSort(a[], n) { for ( i <- 1; i < n; i < i+1) do { 배열 [a], ....... , a[n] 중에서 가장 작은 원소 a[k]를 선택; a[k]를 a[i]와 교환; } } |
'General > Algorithm' 카테고리의 다른 글
[알고리즘] 기초 정렬 알고리즘 - 삽입 정렬(Insertion Sort) (0) | 2009.11.30 |
---|---|
[알고리즘] 기초 정렬 알고리즘 - 버블 정렬(Bubble Sort) (0) | 2009.11.30 |
[알고리즘] 정렬(sorting)의 개요- 레코드(record), 키(key) (0) | 2009.11.30 |
[자료구조] 이원탐색트리 (이진탐색트리) 코드 (0) | 2009.11.30 |
[자료구조] 중위표기식 -> 후위표기식 -> 후위표기식연산 (0) | 2009.11.30 |