[PTA] 6-11カスタムタイプの要素のシーケンスの中央値を見つける

ポータル
6-11カスタムタイプの要素のシーケンスの中央値を見つける(25ポイント)
この質問では、シーケンス内の⌊(N + 1)/ 2であるN個のセット要素A []の中央値を見つける関数を実装する必要があります。 ⌋大きな要素。コレクション要素のタイプはカスタム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

ここに写真の説明を挿入
明らかに、と非効率的な直接挿入ソート、選択ソート、バブルソートなどのソート方法を、彼らは、このノードを渡すだけで23ポイントを獲得することはできません:
使用ヒルは、ソートする最も簡単なヒル意志もTLEを使用して(この問題を解決します、わずかに最適化されたヒルを使用する必要があります)

ElementType Median( ElementType A[], int N )
{
    
    
#define n N
#define a A
  int gap,i,j;
	for(gap=n/2;gap>0;gap/=2)
		for(i=gap;i<n;i++)
			for(j=i-gap;j>=0&&a[j]>a[j+gap];j-=gap)
			{
    
    float temp=a[j];a[j]=a[j+gap];a[j+gap]=temp;}//Swap(a[j], a[j + gap]);
	return a[n/2];
}

おすすめ

転載: blog.csdn.net/weixin_49640089/article/details/112798285