pivot的选择主要有四种策略:

  • 首元素法
  • 尾元素法
  • 三数取中法
  • 随机法

首元素法

直接选择数组中第一个元素

int ChoosePivot(int* pData, int begin ,int end)
{return pData[begin];
}

尾元素法

直接选择最后一个元素

int ChoosePivot(int* pData, int begin, int end)
{return pData[end];
}

三数取中法(三个数取中间大小的值)

选取第一个元素,最后一个元素,最中间的元素,取其中位数作为pivot。例如,对于序列 1 3 7 2 4,
选取后的序列为 1 7 4,中位数为4,最终以4作为pivot。

int ChoosePivot(int* pData, int begin ,int end)
{int middle = (begin + end) / 2;if (pData[begin] >= pData[middle] && pData[begin] <= pData[end] || pData[begin] >= pData[end] && pData[begin] <= pData[middle])return pData[begin];else if (pData[middle] >= pData[begin] && pData[middle] <= pData[end] || pData[middle] >= pData[end] && pData[middle] <= pData[begin])return pData[middle];elsereturn pData[end];
}

随机数法

随机选择一个元素作为pivot

int ChoosePivot(int* pData, int begin ,int end)
{int randIdx = (rand() % (end + 1 - begin)) + begin;return pData[randId];
}

快速排序中pivot的选取策略相关推荐

  1. BT源代码学习心得(十五):客户端源代码分析(下载过程中的块选取策略)

    BT源代码学习心得(十五):客户端源代码分析(下载过程中的块选取策略) 发信人: wolfenstein (NeverSayNever), 个人文集 标  题: BT源代码学习心得(十五):客户端源代 ...

  2. knn中k的选取策略

    K值较小,则模型复杂度较高,容易发生过拟合,学习的估计误差会增大,预测结果对近邻的实例点非常敏感. K值较大可以减少学习的估计误差,但是学习的近似误差会增大,与输入实例较远的训练实例也会对预测起作用, ...

  3. 双轴快速排序(Dual Pivot Quicksort)

    双轴快速排序(Dual Pivot Quicksort) 引子 在Timsort的分析前,我提到了在使用Arrays.sort()时针对int[]会使用DualPivotQuicksort类进行排序. ...

  4. 再议《反驳 吕震宇的“小议数据库主键选取策略(原创)” 》

    前天发表了篇文章叫<小议数据库主键选取策略(原创)>,随即有网友提出了反驳意见<反驳 吕震宇的"小议数据库主键选取策略(原创)" >,看到后,我又做了做实验 ...

  5. 小议数据库主键选取策略

    我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一 行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据更 ...

  6. el-select 多选取值_数值优化|笔记整理(3)——线搜索中的步长选取方法,线性共轭梯度法...

    上一节笔记传送门: 学弱猹:数值优化|笔记整理(2)--线搜索:步长选取条件的收敛性​zhuanlan.zhihu.com ------------------------------------ 大 ...

  7. 回溯法采用的搜索策略_数值优化|笔记整理(3)——线搜索中的步长选取方法,线性共轭梯度法...

    上一节笔记传送门: 学弱猹:数值优化|笔记整理(2)--线搜索:步长选取条件的收敛性​zhuanlan.zhihu.com ------------------------------------ 大 ...

  8. 小议数据库主键选取策略(转自吕震宇老师博文)

    < DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> ...

  9. 小议数据库主键选取策略(转)

    我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据更新 ...

  10. 快速排序基准位置的选取方法和快速排序优化

    目录 一. 快速排序基准位置的选取方法 1.固定位置法 2.随机选取基准法 3.三分取基准 二.优化: 1.当待排序数组当中数据比较少的时候,用直插 2.聚集相同元素法(基准一样的元素),减少递归的次 ...

最新文章

  1. Centos学习笔记之grep命令
  2. SylixOS iMX6平台I2C总线驱动
  3. chrome扩展推荐:有我,你又省了一个ssh客户端 --- Secure Shell
  4. 微信公众平台消息接口开发(29)校验签名与消息响应合并
  5. 浏览器的referer是服务器修改的吗,利用浏览器调整http的referer
  6. 2016年第七届蓝桥杯 - 国赛 - Java大学C组 - A. 平方末尾
  7. Java基础---网络编程
  8. son-server模拟http mock数据
  9. 牛客网算法工程师能力评估
  10. 使用Cron和PHP检测网页是否被篡改
  11. 显示网站Alexa世界排名的代码
  12. 亮道剧学铭:激光雷达系统量产上车没那么容易
  13. Typora使用技巧
  14. 壮族小伙车祸离世 父亲含泪捐儿器官救6人
  15. Python实时获取steam游戏数据
  16. php镂空窗,镂空文字效果 视频画面变成镂空文字效果制作
  17. 新入行的软件测试工程师必须知道这7点...
  18. 推荐一些硬核的公众号
  19. SAP 银企直连 付款报文签名与长度限制处理
  20. 国家气象局提供的天气预报接口(完整Json接口)

热门文章

  1. UwpDesktop!WPF也能开发Surface Dial
  2. iOS根据模型获取模型字段以及字段的类型(用于创建数据库的表)
  3. 《HTML 5与CSS 3 权威指南(第3版·上册)》——第1章 Web时代的变迁
  4. Java中获取request对象的几种方法
  5. PHP问题 —— The use statement with non-compound name
  6. Nagios监控数据脚本记录一下。
  7. CentOS6.5搭建MySQL5.1主从复制
  8. linux忘记root密码及时间设定
  9. 4.微服务设计 --- 集成
  10. 24. Element namespaceURI 属性