[C언어 소스] 선택 정렬 (Selection Sort, 내림 차순)
//디딤돌 C언어 http://ehpub.co.kr
//선택 정렬 (내림차순)
//의사 코드(pseudo code)
//함수 SelectionSort : 정수들이 있는 시작 위치 n : 원소 개수)
//반복: n이 0보다 클 동안
// base에서 n 개의 원소 중에 제일 큰 위치를 찾아 max_pos에 대입
// max_pos와 base 위치의 원소를 교환
// n을 1 감소, base를 다음 위치로 이동(for문의 후처리 구문)
#include <stdio.h>
#include <assert.h>
void Swap(int *a, int *b);//두 수를 바꾸는 함수
int *GetMaxPos(int *base, int n);//최대값 위치 찾는 함수
void SelectionSort(int *base, int n);
int main()
{
int arr[10] = { 1,7,10,5,9,12,3,6,10,7 };
int i = 0;
SelectionSort(arr, 10);
for (i = 0; i < 9; i++)
{
assert(arr[i] >= arr[i + 1]);
}
printf("SelectionSort 함수 테스트 성공\n");
return 0;
}
void Swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int *GetMaxPos(int *base, int n)
{
int max_index = 0;
int index = 0;
for (index = 1; index< n; index++)
{
if (base[index] > base[max_index])
{
max_index = index;
}
}
return base + max_index;
}
void SelectionSort(int *base, int n)
{
int *max_pos = 0;
for (; n>0; n--, base++)
{
max_pos = GetMaxPos(base, n);
Swap(max_pos, base);
}
}
실행 결과
SelectionSort 함수 테스트 성공
본문
'C언어 > 디딤돌 C언어 예제' 카테고리의 다른 글
[C언어 소스] 문자열에 관한 함수 (0) | 2016.11.29 |
---|---|
[C언어 소스] 배열과 포인터를 이용한 문자열 사용 (0) | 2016.11.29 |
[C언어 소스] n 개의 정수 중에 최대값 위치 구하는 함수 (0) | 2016.11.29 |
[C언어 소스] n 개의 정수의 합계를 구하는 함수 (0) | 2016.11.29 |
[C언어 소스] 범위 내의 정수 중에 소수 개수를 구하는 함수 (0) | 2016.11.28 |