6-11 求自定型別元素序列的中位數 (25分)希爾排序……
本題要求實現一個函式,求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
這道題,出得一點也不講師德,來,騙,來,搞我心態,我一個19歲的老同志,這好嗎,這不好!我就想劃下水,做下簡單的程式設計題,欺騙自己在努力學習,於是看到了序列中位數,我說這道題不就是排序然後給出指定的位置嗎,為了給自己加大難度,我上來就是一個快速排序,一個計算輸出下標,我全部想到了啊,按照傳統,解題點到為止,於是我點了提交,結果顯示最大N,超時,大意了啊,沒想到這題暗藏玄機,看來是有備而來,我說,你這道題沒水準標題騙淫,她說,她是亂出的,這題可不是亂出的啊,暗藏希爾排序,而希爾排序裡又有直接插入排序,後來她說她在浙大教書,出過幾本書,好傢伙,看來是有備而來!
我勸,這位出題人,耗子尾汁,好好反思。以後不要再犯這樣的詭計,小詭計啊。
pta要以和為貴,要將師德,不要搞窩裡鬥。謝謝朋友們。
ElementType Median( ElementType A[], int N )
{
int i,j,gap;
//利用希爾排序排序好陣列,最深層迴圈為希爾排序裡的直接插入排序法、
for(gap=N/2;gap>0;gap/=2)//步長
for(i=0;i<gap;i++)
{
for(j=i+gap;j<N;j+=gap)
if(A[j]<A[j-gap]){
float temp=A[j];
int k=j-gap;
while(k>=0&&A[k]>temp)
{
A[k+gap]=A[k];
k-=gap;
}
A[k+gap]=temp;
}
}
return A[N/2];
}
文末附上開始寫的垃圾程式碼
int kuaipai(ElementType A[],int i,int N)
{
int j=i,k=N;
float box=A[i];
while(j<k)
{
while(j<k&&A[k]>=box) k--;
if(k>j) {
A[j]=A[k];
j++;
}
while(j<k&&A[j]<box) j++;
if(j<k) {
A[k]=A[j];
k--;
}
}
A[j]=box;
return j;
}
void part2(ElementType A[],int i,int N)
{
if(i<N){
int r=kuaipai(A,i,N);
part2(A,r+1,N);
part2(A,i,r-1);
}
}
ElementType Median( ElementType A[], int N )
{
part2(A,0,N-1);
if(N%2==0)
return (A[N/2]+A[N/2-1])/2.0;
else return A[N/2];
}
相關文章
- PTA基礎程式設計題目集 6-11 求自定型別元素序列的中位數 (25分)程式設計型別
- 希爾排序排序
- 理解希爾排序排序
- Java希爾排序Java排序
- 希爾排序(一)排序
- 希爾排序(二)排序
- 希爾排序(Shell Sort)排序
- C++希爾排序C++排序
- 希爾排序(C++)排序C++
- 排序演算法__希爾排序排序演算法
- 【排序演算法】- 希爾排序排序演算法
- 希爾排序——重溫排序(二)排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- PHP 排序演算法之希爾排序PHP排序演算法
- 【演算法】希爾排序的實現演算法排序
- 一組關鍵字序列,分別給出用希爾排序、直接選擇排序演算法從小到大排序結果排序演算法
- 排序演算法:Java實現希爾排序排序演算法Java
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- JavaScript希爾排序簡單介紹JavaScript排序
- rust-algorithms:14-希爾排序RustGo排序
- 第二章 :查詢與排序-------希爾排序排序
- python實現希爾排序演算法Python排序演算法
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 七、排序,選擇、冒泡、希爾、歸併、快速排序實現排序
- 【PHP資料結構】插入類排序:簡單插入、希爾排序PHP資料結構排序
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- 程式猿修仙之路--演算法之希爾排序演算法排序
- 【譯】Swift演算法俱樂部-希爾排序Swift演算法排序
- 基礎演算法系列 之希爾排序演算法排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 淺解前端必須掌握的演算法(四):希爾排序前端演算法排序
- 【小小前端】前端排序演算法第二期(繞人的希爾排序)前端排序演算法
- (建議收藏)2020最新排序演算法總結:冒泡、選擇、插入、希爾、快速、歸併、堆排序、基數排序排序演算法
- python演算法與資料結構-希爾排序(35)Python演算法資料結構排序
- mysql 求分組中位數、環比、同比、中位數的環比、同比MySql
- 求資料流中的中位數問題
- 每天一道演算法題:求兩個排序陣列的中位數演算法排序陣列
- 資料結構上機——希爾排序(含監視哨版本)資料結構排序