선택정렬(Selection Sort)
1. 주어진 값들 중에 최소값을 찾는다
2. 최소값을 맨 앞의 값과 교환한다.
3. 맨 앞의 값을 뺀 위치에서 1과 2를 반복한다.
#include <stdio.h>
void SelecSort(int *arr, int num)
{
int i, j;
int min;
int temp;
for (i = 0; i < num - 1; i++)
{
//i번째 단계: i번째 원소를 기준으로 n-1개의 원소를 비교하기 시작
min = i;
for (j = i + 1; j < num; j++) //기준원소부터 시작해 끝원소까지 중에 최소값 찾기
{
if (arr[j] < arr[min])
{
min = j;
}
}
//SWAP
temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
int main()
{
int arr[7] = { 9, 4, 8, 12, 2, 5, 1 };
int i;
SelecSort(arr, sizeof(arr) / sizeof(int));
printf("정렬 후: ");
for (i = 0; i < sizeof(arr)/sizeof(int); i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
다른 방법으로 구현해봤다.
#include <stdio.h>
void SelectionSort(int *arr, int len)
{
int i, j, temp;
for (i = 0; i < len-1; i++)
{
printf("i: %d \n", i);
for (j = i + 1; j < len; j++)
{
if (arr[i]>arr[j])
{
printf("Smallest:%d --> SWAP\n", arr[j]);
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
for (int a = 0; a < len; a++)
{
printf("%d ", arr[a]);
}
printf("\n\n");
}
}
int main()
{
int arr[] = { 5, 1, 2, 8, 26, 14 };
int len = sizeof(arr) / sizeof(int);
SelectionSort(arr, len);
/*
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
*/
return 0;
}
728x90
'알고리즘' 카테고리의 다른 글
도전 프로그래밍2 - 2번문제 (0) | 2017.06.14 |
---|---|
[C] 삽입 정렬(Insertion Sort) (0) | 2017.04.24 |
[C] 이진 탐색 알고리즘의 재귀적 구현 (0) | 2017.04.19 |
[C] 피보나치 수열 (0) | 2017.04.19 |
[C] 재귀 함수 (Recursive) 팩토리얼 (0) | 2017.04.19 |