6-11 求自定类型元素序列的中位数
来源:互联网 发布:战舰世界蒙大拿数据 编辑:程序博客网 时间:2024/05/21 17:06
近段时间在刷PTA,想不到基础编程题都够我喝一壶,弱弱地打击了一下我的积极性,但是题还是要刷的对吧。下面是题目
6-11 求自定类型元素序列的中位数(25 分)
本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌊N/2+1⌋大的元素。其中集合元素的类型为自定义的ElementType。
函数接口定义:
ElementType Median( ElementType A[], int N );
其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回N个A[]元素的中位数,其值也必须是ElementType类型。
裁判测试程序样例:
#include <stdio.h>#define MAXN 10typedef 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
问题在于用例5,无论用冒泡、快排和插入都是运行超时,最后模仿网上(http://blog.csdn.net/qq_35283188/article/details/77916599)用希尔排序才完成。此文当作记录一下初步学习这几种排序的笔记
0sample, 小奇数答案正确2 ms128KB1偶数个答案正确2 ms128KB2最小N答案正确1 ms128KB3超过10,中位数是最后1个答案正确2 ms128KB4超过10,中位数是第1个答案正确2 ms164KB5大N,卡时运行超时0 ms0KB
#include <stdio.h>#define MAXN 10typedef float ElementType;ElementType Median( ElementType A[], int N );void showarray( ElementType a[], int len );void quicksort( ElementType A[], int l, int r);void bubblesort( ElementType A[], int N );void insertsort( ElementType a[], int len );void shellsort(ElementType a[], int len);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)); system("pause");}ElementType Median( ElementType A[], int N ){ int j; j = N/2; //quicksort(A, 0, N-1); shellsort(A, N); printf("\n*********************Final********************\n"); showarray(A,N); printf("\n*********************Final********************\n"); return A[j];}void shellsort(ElementType a[], int len){ int gap, i, j; ElementType tmp; for(gap = len/2; gap>0; gap/=2) { for(i=gap; i<len; i++) { tmp = a[i]; for(j=i; j>0 && a[j-gap]>tmp; j-=gap) { a[j] = a[j-gap]; //前一位和当前位a[j]交换 } a[j] = tmp; } }}/** 插入排序,先小范围比较,再慢慢扩大 * 例如数组 a[12 45 1 902 32 42 3 53] * 先取12 ,往前没有数比较,不管,直接下一步 * 再取45,形成[12, 45],45往前和12比较,12<45,位置不变 * 再取1,形成[12, 45, 1],1往前和45比较,45比1大,则a[2]变成45(45退一位,45本来是a[1]),a[1]空出;1再往前和12比,12比1大,所以a[1]变成12,不能再往前,a[0]=0 * 再取902,形成[1, 12, 45, 902],不变 * 再取32,形成[1, 12, 45, 902, 32],32和902比,902比32大,则a[4]变成902;32再往前和45比,45比32大,则a[3] = 45;32再往前和12比,12不比32大,所以结束for循环,此时,j为a[2](即45之前的位置) * */void insertsort( ElementType a[], int len ){ int i,j; ElementType tmp; for(i=0; i<len; i++) { tmp = a[i]; for(j=i; j>0 && a[j-1]>tmp; j--) { a[j] = a[j-1]; //前一位和当前未a[j]交换 } a[j] = tmp; }}/**< 这里是快排 */void quicksort( ElementType A[], int l, int r){ ElementType tmp; int i, j; if(l < r) { i = l; j = r; tmp = A[i]; while(i < j) { while(A[j]>tmp && i<j) //一定要i<j,因为下面j--改变了j的值,没有这个判定,无法跳过A[j]大于tmp不用改变j值的情况 j--; //由右往左寻找,遇到A[j]>tmp则跳过,寻找下一个 if(i<j) { A[i] = A[j]; i++; } while(A[i]<tmp && i<j) //改变这里的A[i]<tmp小于的符号,同时改变42行A[j]>tmp的大于符号,可以改为由大到小排列 i++; if(i<j) { A[j] = A[i]; j--; } //showarray(A, r+1); //printf("\n***************************\n"); } /**< 如果r == l,下面的语句不会执行,这也是迭代停止的条件 */ A[i] = tmp; quicksort(A, l, i-1); quicksort(A, i+1, r); }}/**< 下面是冒泡排序 */void bubblesort( ElementType A[], int N ){ ElementType temp; int i, j; for(i=0; i<N-1; i++) { for(j=0; j<N-i-1; j++) { if(A[j+1]<A[j]) //从大到小排列 { //printf("A[%d]:%.2f > A[%d]:%.2f ??\n", j+1, A[j+1], j, A[j]); temp = A[j]; A[j] = A[j+1]; A[j+1] = temp; } } }}void showarray(ElementType a[], int len){ int j; for(j=0; j<len; j++) { printf("a[%d]:%.2f\t", j, a[j]); }}
然后继续段错误。。。。。真的一点脾气都没有。到底哪里出错了。
阅读全文
0 0
- 6-11 求自定类型元素序列的中位数
- 4-11 求自定类型元素序列的中位数
- 4-11 求自定类型元素序列的中位数
- 4-11 求自定类型元素序列的中位数*
- 6-11 求自定类型元素序列的中位数(25 分)
- 6-11 求自定类型元素序列的中位数(25 分)
- PTA 6-11 求自定类型元素序列的中位数
- 求自定类型元素序列的中位数 PAT
- 求自定类型元素序列的中位数
- 求自定类型元素序列的中位数
- PAT-C-4-11 求自定类型元素序列的中位数 (25分)
- 4-11 求自定类型元素序列的中位数 (25分)
- 4-11 求自定类型元素序列的中位数 (25分)
- PTA 4-11 求自定类型元素序列的中位数 (25分)
- 4-11 求自定类型元素序列的中位数 (25分)
- 4-11 求自定类型元素序列的中位数 (25分)
- PAT基础题 4-11 求自定类型元素序列的中位数
- PAT练习基础编程题目之求自定类型元素序列的中位数
- js 时间转换时区
- scala的可堆叠特征
- Android五大数据存储详解
- 12月11日云栖精选夜读:【X-Pack解读】阿里云Elasticsearch X-Pack Graph组件功能详解
- 递归函数 和 全局变量
- 6-11 求自定类型元素序列的中位数
- Windows.open怎么封装成POST请求的js
- 一句代码实现银行卡手机号输入时格式化
- js点击标题展示内容,再次点击标题关闭内容
- 17年12月学习计划
- Git 命令行
- 关于rem布局的理解
- JavaScript之闭包、定时器
- IDEA的springboot项目maven打包的时候过滤掉单元测试