PAT基礎編程題目-6-11 求自定類型元素序列的中位數

PAT基礎編程題目-6-11 求自定類型元素序列的中位數

題目詳情

在這裏插入圖片描述

題目地址:https://pintia.cn/problem-sets/14/problems/743

解答

C語言版

注:這裏如果簡單的使用冒泡等一般的排序方法是通過不了的,大N會卡時。使用希爾排序可以通過。

#include <stdio.h>

#define MAXN 1000
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;
}
ElementType Median(ElementType A[], int N) {
	int increment = N / 2;
	ElementType tmp;
	int i, j;
	// 採用希爾排序+直接插入排序
	while (increment) {
		for (i = 0; i < N-increment; i++)
		{
			for (j = i+increment; (j-increment)>=0 && A[j-increment] > A[j]; j = j - increment )
			{
				tmp = A[j - increment];
				A[j - increment] = A[j];
				A[j] = tmp;
			}
		}
		increment = increment / 2;
	}
	for (int i = 0; i < N; i++)
	{
		printf("%.2f ", A[i]);
	}
	printf("\n");
	return A[N / 2];  // 返回第N/2個位置的即可,不需要分奇偶討論
}

在這裏插入圖片描述

C++版

C++中有排序函數,可以直接使用這個排序函數(官方寫的比我們自己寫的要快太多了,是一種優化後的快速排序)

#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;

#define MAXN 1000
typedef float ElementType;

ElementType Median(ElementType A[], int N);

int main()
{
	ElementType A[MAXN];
	int N, i;

	cin >> N;
	for (i = 0; i < N; i++)
		cin >> A[i];
	cout << fixed << setprecision(2) << Median(A, N)<<endl;

	return 0;
}
ElementType Median(ElementType A[], int N) {
	// 用C++自帶(#include<algorithm>中)的排序函數
	sort(A, A+N, greater<ElementType>());  //不寫第三個參數,默認升序。greater<ElementType>()表示降序
	for (int i = 0; i < N; i++)
	{
		printf("%.2f ", A[i]);
	}
	printf("\n");
	return A[N / 2];
}

在這裏插入圖片描述

Java版

Java中有排序函數,可以直接使用這個排序函數(官方寫的比我們自己寫的要快太多了,是一種優化後的快速排序)

import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Scanner;
public class Main{

	private static final int MAXN = 1000;
	
	private static float Median(float []A, int N) {
		Arrays.sort(A, 0, N);  //0包括,N不包括
		for (int i = 0; i < N; i++) {
			System.out.print(A[i]+" ");
		}
		System.out.println();
		return A[N/2];
	}
	
	public static void main(String[] args) {
		int N = 0;
		float [] A = new float[MAXN];
		Scanner scanner = new Scanner(System.in);
		if(scanner.hasNext()) {
			N = scanner.nextInt();
			for (int i = 0; i < N; i++) {
				A[i] = scanner.nextFloat();
			}
		}
		scanner.close();
		DecimalFormat decimalFormat = new DecimalFormat("#.00");
		System.out.println(decimalFormat.format(Median(A, N)));
	}
}

在這裏插入圖片描述

創作不易,喜歡的話加個關注點個贊,謝謝謝謝謝謝!

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