PTA基础编程题目集-6-11 求自定类型元素序列的中位数(简单解法)


大概是最简单并且最优的解法?一般都是对数组进行排序之后选出中位数,但是其实只要找到最中间的数,中位数两边的数字是没有必要排序的

算法大致步骤:首先选定一个数,假定为中位数,在边界里遍历其他数字,把比它小的扔到左边,比它大的扔到右边,遍历一次之后,如果这个数刚好是数组的中位数就返回结果,如果这个数在中位数的左边,记录该位置为左边界,往右边找中位数,假定右边第一个数是中位数,重复遍历过程,如果在中位数的右边,记录该位置为右边界,假定左边第一个数是中位数,重复以上过程直到找到中位数

cpp 复制代码
ElementType Median( ElementType A[], int N ){
  ElementType t;
  int i=0;
  int k=1;
  int min=0;
  int max=N-1;
  while(1){
    for(int j=i+k;j>=min&&j<=max;j+=k){
      if(A[i]*k>A[j]*k){
        t=A[j];
        for(int r=j;r*k>i*k;r-=k){
          A[r]=A[r-k];
        }
        A[i]=t;
        i+=k;
      }
    }
    if(i==N/2){
      break;
    }
    if(i<N/2){
      i++;
      k=1;
      min=i;
    }
    if(i>N/2){
      i--;
      k=-1;
      max=i;
    }
  }
  return A[i];
}
相关推荐
nike0good1 天前
The 4th Universal Cup GP of Kyoto, April 4-5, 2026 题解
算法·深度优先·图论
炘爚1 天前
C++实现分布式集群聊天服务器
服务器·c++·分布式
见叶之秋1 天前
【数据结构】二叉树的遍历和节点个数
数据结构
低频电磁之道1 天前
C++中 explicit 用法:多参数构造函数
c++
澈2071 天前
高效查找算法详解:从顺序到哈希
数据结构·算法·哈希算法
kobesdu1 天前
开源3D激光SLAM算法的异同点、优劣势与适配场景总结
算法·3d·机器人·ros
czxyvX1 天前
2-Qt信号与槽
c++·qt
ZC跨境爬虫1 天前
3D 地球卫星轨道可视化平台开发 Day13(卫星可视化交互优化+丝滑悬停聚焦)
前端·算法·3d·json·交互
水木流年追梦1 天前
CodeTop Top 100 热门题目(按题型分类)
算法·leetcode
Tisfy1 天前
LeetCode 1722.执行交换操作后的最小汉明距离:连通图
算法·leetcode·dfs·题解·深度优先搜索·连通图