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

 
Previous Post Perl 펄] 중앙값, 중간값, 메디안 구하기 함수; Median Function광각 디카] 28미리 광각 렌즈 지원되는 똑딱이는? 28mm 컴팩트 디카Python 파이썬] 무한 루프 만들기, 루프 탈출/빠져나오기 방법 'while' 'bre...C언어] 무한루프 만들기, 루프 탈출/빠져나오기 방법; 'while' 'for' 'brea...Excel 엑셀] 분산 구하기 함수 (표본의 분산); Variance FunctionExcel 엑셀] 중앙값, 중간값, 메디안 구하기 함수; Median Function매스매티카] 중앙값, 중간값, 메디안 구하기 함수; Mathematica Median매스매티카] 표준편차, 분산 구하기 함수; Mathematica Standard Devia...탐색기에서, 파일 복사/이동; 마우스 우측 버튼으로; File Copy Context Me...키보드로 파일 복사, 폴더 카피 방법; File Copy Using Keyboard

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

Monday, May 28, 2007

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;
}



0 Comments:

Post a Comment

<< Home RSS 2.0 feed

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