儘管經過改良,冒泡排序仍然爲極低效率的排序(改了那麼多還是慢…)
極不提倡!!!
函數----冒泡排序++;
ElementType Median( ElementType A[], int N )
{
int j=1,n=N;
int flag=n;
while(flag)
{
n=flag;
flag=0;//若後面的元素已經排序完畢,flag不變
for(int i=1;i<n;i++)
{
ElementType temp=0;
if(A[i-1]>A[i]) {
temp=A[i];//交換。用函數或許更快。
A[i]=A[i-1];
A[i-1]=temp;
flag=i;//如果不執行的話flag ==n直接爲0;
//結束循環,記錄位置;
}
}
}
return A[N/2];//原題。輸出中位數。。。
}
原題
本題要求實現一個函數,求N個集合元素A[]的中位數,即序列中第⌊N/2+1⌋大的元素。其中集合元素的類型爲自定義的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;
}
/* 你的代碼將被嵌在這裏 */