计算机考研复试 中位数
题目描述
中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数). 给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)
输入描述:
该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1<=N<=10000. 接着N行为N个数据的输入,N=0时结束输入
输出描述:
输出中位数,每一组测试数据输出一行
示例1
输入
4 10 30 20 40 3 40 30 50 4 1 2 3 4 0
输出
25 40 2
//计算机考研复试 中位数 /* 水题,练习下快排。 */ #include<iostream> #include<vector> using namespace std; void quickSort(vector<int>&v,int low,int high){ //快速排序,注意:如果这里用向量的话得加引用 int i=low,j=high; if(low<high){ int tmp=v[low]; while(i<j){ //一趟排序 while(j>i&&v[j]>tmp) --j; if(i<j){ v[i]=v[j]; ++i; } while(i<j&&v[i]<tmp) ++i; if(i<j){ v[j]=v[i]; --j; } } v[i]=tmp; quickSort(v,low,i-1); quickSort(v,i+1,high); } } int main(){ int N=0; while( cin>>N&&N!=0){ vector<int>v(N); for(int i=0;i<N;++i) cin>>v[i]; //sort(v.begin(),v.end()); quickSort(v,0,v.size()-1); //升序排序 if(N%2==0) //偶数个,输出最中间两个数的平均数 cout<<(v[N/2]+v[N/2-1])/2<<endl; else //奇数个,输出最中间的平均数 cout<<v[N/2]<<endl; } return 0; }