중앙값(Median)이란?
목록의 요소들이 크기순으로 정렬되어 있을 때, 전체 항목을 양쪽에 동일한 개수의 항목이 남도록 둘로 나누는 가운데 값을 중앙값(median)이라고 합니다.
항목의 개수가 홀수이면 중앙값은 하나뿐이지만, 짝수이면 가운데 값이 두 개가 됩니다. 따라서 항목 수가 짝수일 때의 중앙값은 두 가운데 값들의 평균으로 정의됩니다.
알고리즘
중앙값을 계산하기 위한 알고리즘은 다음과 같습니다.
- 1단계 – 항목의 개수를 세면서 배열에 항목들을 입력받습니다.
- 2단계 – 항목들을 크기순으로 정렬합니다.
- 3단계 – 중앙값을 계산합니다.
정렬 로직
중앙값을 구하기 전에 숫자를 정렬하는 데 사용되는 로직은 다음과 같습니다.
for (i = 1 ; i <= n-1 ; i++){
for (j = 1 ; j <= n-i ; j++){
if (a[j] <= a[j+1]){
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
} else
continue ;
}
}중앙값 계산 로직
정렬된 목록에서 중앙값을 찾는 로직은 다음과 같습니다. 항목 수가 짝수면 가운데 두 값의 평균을, 홀수면 정확히 가운데 값을 선택합니다.
if ( n % 2 == 0)
median = (a[n/2] + a[n/2+1])/2.0 ;
else
median = a[n/2 + 1];예제 프로그램
다음은 주어진 숫자들의 중앙값을 계산하는 완전한 C 프로그램입니다.
#include<stdio.h>
#define N 10
main( ){
int i,j,n;
float median,a[N],t;
printf("Enter the number of items\n");
scanf("%d", &n);
/* 배열 a에 항목 입력 받기 */
printf("Input %d values \n",n);
for (i = 1; i <= n ; i++)
scanf("%f", &a[i]);
/* 정렬 시작 */
for (i = 1 ; i <= n-1 ; i++){ /* i번째 패스 시작 */
for (j = 1 ; j <= n-i ; j++) {
if (a[j] <= a[j+1]) { /* 값 교환 */
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
else
continue ;
}
} /* 정렬 끝 */
/* 중앙값 계산 */
if ( n % 2 == 0)
median = (a[n/2] + a[n/2+1])/2.0 ;
else
median = a[n/2 + 1];
/* 결과 출력 */
for (i = 1 ; i <= n ; i++)
printf("%f ", a[i]);
printf("\n\nMedian is %f\n", median);
}실행 결과
위 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.
Enter the number of items 5 Input 5 values 2.3 1.2 3.8 4.6 8.9 8.900000 4.600000 3.800000 2.300000 1.200000 Median is 3.800000
실행 결과에서 볼 수 있듯이, 입력된 5개의 값이 내림차순으로 정렬된 후 가운데 위치한 값인 3.8이 중앙값으로 출력됩니다. 참고로 이 프로그램은 배열 인덱스를 1부터 사용하며, 정렬 방향(오름차순/내림차순)은 중앙 위치의 값이 동일하므로 중앙값 계산 결과에는 영향을 주지 않습니다.