선택 정렬 (Selection Sort)
이번에는 반복 알고리즘일 이용하는 선택 정렬 알고리즘을 알아봅시다.
선택 정렬 알고리즘은 제일 큰 값을 찾아 맨 뒤의 요소와 교체하는 방법을 반복하여 전체를 정렬하는 알고리즘입니다. 물론 제일 작은 값을 찾아 맨 앞의 요소와 교체하는 방법을 반복할 수도 있습니다.
선택 정렬 알고리즘을 의사코드(pseudo code: 논리적인 수행 흐름을 이해할 수 있게 작성한 코드)는 다음과 같습니다.
선택 정렬(base:컬렉션,n:원소 개수,compare:비교 논리)
반복(i:=n; i>1 ; i:= i-1)
반복(max=0,j:=1; j<i ; j:=j+1)
조건(compare(base[max], base[j]) < 0)
max := j
temp: = base[i-1]
base[i-1] = base[max]
base[max] = temp
선택정렬
//선택 정렬(Selection Sort)
#include <stdio.h>
#define SWAP(a,b) {int t; t = a; a=b; b=t;}//a와 b를 교환
void SelectionSort(int *base, int n);
int main(void)
{
int arr[10] = { 9,4,3,10,5,8,7,6,2,1 };
SelectionSort(arr, 10);
return 0;
}
void ViewArr(int *arr, int n);
void SelectionSort(int *base, int n)
{
int i, j;
int maxi;
ViewArr(base, n);//현재 상태 출력
for (i = n; i>1; i--)//정렬할 범위를 축소해 나갑니다.
{
maxi = 0;
for (j = 1; j<i; j++)
{
if (base[maxi]<base[j])//더 큰 원소를 만나면
{
maxi = j;
}
}
SWAP(base[maxi], base[i - 1]);//교환
ViewArr(base, n);//상태 출력
}
}
void ViewArr(int *arr, int n)
{
int i = 0;
for (i = 0; i<n; i++)
{
printf("%2d ", arr[i]);
}
printf("\n");
}
자세히 보기
'언어 자료구조 알고리즘 > C언어 예제' 카테고리의 다른 글
[C언어 소스] 힙 정렬(Heap Sort) 알고리즘 (1) | 2016.04.11 |
---|---|
[C언어 소스] 병합 정렬(Merge Sort, 합병 정렬) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 퀵 정렬 (Quick Sort) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 쉘 정렬(Shell Sort) 알고리즘 (1) | 2016.04.11 |
[C언어 소스] 삽입 정렬(Insertion Sort) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 버블 정렬 (Bubble Sort) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 순차 정렬(Sequential Sort) 알고리즘 (0) | 2016.04.11 |
이진 탐색 트리 운행, C언어 소스 (0) | 2016.04.04 |
이중 연결리스트 - 정렬 상태로 보관, C언어 소스 (0) | 2016.04.04 |
이중 연결리스트 - 동적 생성한 데이터 보관, C언어 소스 (0) | 2016.04.04 |