Nếu phần tử danh sách được sắp xếp, giá trị giữa chia thành hai phần bằng nhau gọi là trung vị.
Số lẻ phần tử có một giá trị giữa; số chẵn có hai giá trị giữa. Trung vị số chẵn là trung bình hai giá trị giữa.
Thuật toán
Thuật toán tính trung vị:
Bước 1 - Đọc phần tử vào mảng đồng thời đếm.
Bước 2 - Sắp xếp tăng dần.
Bước 3 - Tính trung vị.
Logic sắp xếp trước khi tìm trung vị:
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;
}
}
Logic tìm trung vị:
if(n % 2 == 0)
median = (a[n/2] + a[n/2+1]) / 2.0;
else
median = a[n/2 + 1];
Ví dụ
Chương trình C tính trung vị:
#include <stdio.h>
#define N 10
main(){
int i, j, n;
float median, a[N], t;
printf("Nhap so luong phan tu\n");
scanf("%d", &n);
printf("Nhap %d gia tri\n", n);
for(i = 1; i <= n; i++)
scanf("%f", &a[i]);
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];
for(i = 1; i <= n; i++)
printf("%f ", a[i]);
printf("\n\nTrung vi la %f\n", median);
}
Đầu ra
Kết quả chạy chương trình:
Nhap so luong: 5 Nhap 5 gia tri: 2.3 1.2 3.8 4.6 8.9 8.900000 4.600000 3.800000 2.300000 1.200000 Trung vi la 3.800000