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];
}
相关推荐
小雨下雨的雨2 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
xieliyu.5 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
一条小锦吕*5 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
cfm_29147 小时前
Redis五大基本数据结构底层了解
数据结构·数据库·redis
如竟没有火炬7 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
8Qi87 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术8 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
Qt程序员8 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
想吃火锅10059 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode