本题要求实现一个函数,求N
个集合元素A[]
的中位数,即序列中第⌊(N+1)/2⌋大的元素。其中集合元素的类型为自定义的ElementType
。
函数接口定义:
ElementType Median( ElementType A[], int N );
其中给定集合元素存放在数组A[]
中,正整数N
是数组元素个数。该函数须返回N
个A[]
元素的中位数,其值也必须是ElementType
类型。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
typedef float ElementType;
ElementType Median( ElementType A[], int N );
int main ()
{
ElementType A[MAXN];
int N, i;
scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &A[i]);
printf("%.2f\n", Median(A, N));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
3
12.3 34 -5
输出样例:
12.30
代码:
void SehllSort(ElementType A[],int N);
ElementType Median( ElementType A[], int N )
{
ShellSort(A,N);
//if(N % 2 == 1) return A[(N - 1) / 2];
//else return (ElementType)((A[(N-2)/2] + A[(N/2)]) / 2.0);
return A[N/2];
}
void ShellSort(ElementType A[],int N)
{
int gap = N / 2;
int i,j;
ElementType e;
while(gap)
{
for(i = gap;i < N;i++)
{
j = i;
while(j >= gap && A[j] < A[j - gap])
{
e = A[j];
A[j] = A[j - gap];
A[j - gap] = e;
j = j - gap;
}
}
gap /= 2;
}
}
一刷总结:
学了希尔排序,内核冒泡=-=,不规范!
二刷代码:
void SehllSort(ElementType A[],int N);
ElementType Median( ElementType A[], int N )
{
ShellSort(A,N);
//if(N % 2 == 1) return A[(N - 1) / 2];
//else return (ElementType)((A[(N-2)/2] + A[(N/2)]) / 2.0);
return A[N/2];
}
void ShellSort(ElementType A[],int N)
{
int gap = N / 2;
int i,j;
ElementType e,temp;
while(gap)
{
for(i = gap;i < N;i++)
{
temp = A[i];
j = i;
while(j >= gap && temp < A[j - gap])
{
A[j] = A[j - gap];
j = j - gap;
}
A[j] = temp;
}
gap /= 2;
}
}
二刷总结:
大部分是自己写的代码,对希尔排序更熟练了,有进步!