USTCOJ 1359 查找中位数 不用排序
来源:互联网 发布:80端口为什么要备案 编辑:程序博客网 时间:2024/04/29 14:04
USTC在线评测1359题 http://acm.ustc.edu.cn/ustcoj/problem.php?id=1359
该题要求读入n个整数,然后输出该n个整数的中位数。同时输入的数的个数是奇数的时候,中位数是唯一的;当输入的数是个数是是偶数的时候,求两个中位数的平均值,然后下取整输出。
一般来说,我们可以将这些数存在数组当中,然后对数组进行排序,最后利用数组下标查找即可。但也可以不排序找到中位数。毕竟排序是将所有数都放在合适的位置上,而查找中位数的操作只需要将中位数放在合适的位置即可。
下面就是不排序查找中位数的版本。事实上,下述解法其实是快速排序的一个变种。在n为奇数的情况下,下述代码运行时间较快排实现运行时间段,因为它每次将数组分成两部分之后只处理了其中一部分。
#include <stdio.h>#include <stdlib.h>int select_kth( int* data, int n, int k) { if (n < 1) printf("Error!\n"); int big, small; big = n-1, small = 0; int v = data[k];//选取data[k]是因为假如data是基本有序的,这样能减少不必要的交换 int i = 0; while (i <= big) { if (data[i] < v) { if (i != small) data[small] = data[i]; i++; small++; } else if (data[i] > v) { int temp; temp = data[i]; data[i] = data[big]; data[big] = temp; big--; } else i++; } //还原数据,因为后期会再次用到该数据 for (i = small; i <= big; i++) data[small] = v; if (k < small) return select_kth(data, small, k); else if (k <= big) return data[k]; else return select_kth(data+big+1, n-big-1, k - big - 1);}int getMedian(int* data, int n){ int k, median; k = n / 2; if (n % 2) median = select_kth(data, n, k); else median = (select_kth(data, n, k) + select_kth(data, n, k - 1)) / 2; return median;}main(){ int n; int data[10001]; //freopen("1359.in", "r", stdin); //freopen("out.txt", "w", stdout); while (scanf("%d", &n), n) { int i; for (i = 0; i < n; i++) scanf("%d", &data[i]); if (n == 1) printf("%d\n", data[0]); else printf("%d\n", getMedian(data, n)); } return 0;}
- USTCOJ 1359 查找中位数 不用排序
- 利用快速排序的子程序查找中位数
- 查找中位数(java 快速排序)
- 查找中位数
- 查找中位数,在线算法
- spark 查找 中位数
- 海量数据查找中位数
- 增量查找中位数
- 二分查找:联合中位数
- hdu5701 中位数查找
- 海量数据查找中位数
- 二分查找-两已排序数组中找中位数二题
- 二排序数组中位数
- 二排序数组中位数
- poj2388排序中位数
- 不排序求中位数
- poj1723 排序+中位数
- POJ1723 SOLDIERS【中位数+排序】
- jsp中文乱码问题整理(部分转载他人)
- Linux的进程/线程通信方式总结
- 调整屏幕的默认超时时间
- 链表
- "undefined reference to" 问题解决方法
- USTCOJ 1359 查找中位数 不用排序
- [3月6日的脚本] 统计指定文件扩展名的文件数目 (PowerShell)
- dede自定义表单php验证方法之一
- window.showModalDialog()方法在Chrome下不能使用的解决方法
- bash参考手册之四(shell内建命令)续四
- iPhone开发教程 UI基础课程(58课时)
- SQL学习笔记8 ---触发器
- SQL优化-索引、查询优化及分页算法方案
- 迷宫找出路代码