改良冒泡排序

儘管經過改良,冒泡排序仍然爲極低效率的排序(改了那麼多還是慢…)
極不提倡!!!

函數----冒泡排序++;

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;

}

/* 你的代碼將被嵌在這裏 */

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章