컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Monday, May 28, 2007

C언어] double 배열 중앙값, 중간값, 메디안 구하기 함수; Median Function


C언어에서 숫자가 들어 있는 배열의 중앙값(Median)을 구하는 예제 소스입니다. 아래의 getMedian 함수에, 배열명과 배열 요소 개수를 넣어주면 중앙값을 반환합니다. 다만 이미 크기순으로 소팅된 배열이어야 합니다. 그렇지 않으면 틀린 값을 반환합니다.

C에서 중앙값 계산 예제 소스


소스 파일명: example.cpp
#include <stdio.h>
#include <stdlib.h> // qsort()

int comparisonFunctionDouble(const void *a, const void *b);
double getMedian(double* array, size_t arraySize);


int main(void) {

  double a1[] = { 1, 2, 3 };
  qsort((void *)a1, sizeof(a1) / sizeof(a1[0]), sizeof(a1[0]), comparisonFunctionDouble);
  printf(  "%.2f\n", getMedian(a1, sizeof(a1) / sizeof(a1[0]))  );
  // 출력 결과: 2.00

  double a2[] = { 1, 2, 3, 4 };
  qsort((void *)a2, sizeof(a2) / sizeof(a2[0]), sizeof(a2[0]), comparisonFunctionDouble);
  printf(  "%.2f\n", getMedian(a2, sizeof(a2) / sizeof(a2[0]))  );
  // 출력 결과: 2.50

  double a3[] = { 4, 3, 1, 2 };
  qsort((void *)a3, sizeof(a3) / sizeof(a3[0]), sizeof(a3[0]), comparisonFunctionDouble);
  printf(  "%.2f\n", getMedian(a3, sizeof(a3) / sizeof(a3[0]))  );
  // 출력 결과: 2.50

  double a4[] = { 1345, 1301, 1368, 1322, 1310, 1370, 1318, 1350, 1303, 1299 };
  qsort((void *)a4, sizeof(a4) / sizeof(a4[0]), sizeof(a4[0]), comparisonFunctionDouble);
  printf(  "%.2f\n", getMedian(a4, sizeof(a4) / sizeof(a4[0]))  );
  // 출력 결과: 1320.00

  double a5[] = { 1, 2 };
  qsort((void *)a5, sizeof(a5) / sizeof(a5[0]), sizeof(a5[0]), comparisonFunctionDouble);
  printf(  "%.2f\n", getMedian(a5, sizeof(a5) / sizeof(a5[0]))  );
  // 출력 결과: 1.50

  double a6[] = { 100 };
  qsort((void *)a6, sizeof(a6) / sizeof(a6[0]), sizeof(a6[0]), comparisonFunctionDouble);
  printf(  "%.2f\n", getMedian(a6, sizeof(a6) / sizeof(a6[0]))  );
  // 출력 결과: 100.00


  return 0;
}




// 중앙값 구하기 함수
// 주의! 크기 순으로 이미 정렬된 배열을 입력해야만 합니다.
// 코드의 효율성을 위해서 이 함수 자체에는
// 정렬 기능이 포함되어 있지 않습니다
double getMedian(double* array, size_t arraySize) {
  size_t center = arraySize / 2; // 요소 개수의 절반값 구하기
  if (arraySize % 2 == 1) { // 요소 개수가 홀수면
    return array[center]; // 홀수 개수인 배열에서는 중간 요소를 그대로 반환
  } else {
    return (array[center - 1] + array[center]) / 2.0; // 짝수 개 요소는, 중간 두 수의 평균 반환
  }
}


// qsort 내부에서 사용되는 비교 함수
int comparisonFunctionDouble(const void *a, const void *b) {
  if (*(double*)a <  *(double*)b) return -1;
  if (*(double*)a == *(double*)b) return  0;

  return 1;
}





tag: cpp
C언어 | C/C++ (Visual C++)

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top