第i个顺序统计量:该集合中第i小的元素(建集合排序后第i位 当然算法可以不排序)

中位数:集合中的中点元素

下中位数

上中位数

9.1最大值和最小值

单独的max或min每个都要扫一遍 n-1次比较

如果同时找max和min 要

:1.2个数相互比较 1次{每次选出2个 选n//2次}

2.大的和max比较

3.小的和min比较

找出序列为第i小的数Θ(n)

随机快速排序的运用:(可以回去看快排)

代码:

import random

def PARTTION(A,p,r):
x = A[r]
i = p -1
for j in range(p,r):
if A[j] <= x:
i += 1
A[j],A[i] = A[i],A[j]
i += 1
A[r],A[i] = A[i],A[r]
print(x,A)
return i def RANDOMIZED_PARTITION(A,p,r):
#主元随机化处理
t = random.randint(p,r)
A[t],A[r] = A[r],A[t]
return PARTTION(A,p,r) def RANDOMIZED_SELECT(A,p,r,i):
#A 要查找的list
#p 左边界
#r 右边界
#i 值[p,r]中第i位
if p == r: #只有一位
return A[p] q = RANDOMIZED_PARTITION(A,p,r) #快排关键代码 分成俩半
k = q - p + 1
if i == k:
return A[q]
elif i < k:
return RANDOMIZED_SELECT(A,p,q-1,i)
else:
return RANDOMIZED_SELECT(A,q+1,r,i-k) if __name__ == "__main__":
A = [89, 100, 21, 5, 2, 8, 33, 27, 63]
print(RANDOMIZED_SELECT(A,0,len(A)-1,2)) #查找第二位 '''
>>>
=========== RESTART: F:/python/algorithms/9_3_randomized_select.py ===========
63 [21, 5, 2, 8, 33, 27, 63, 100, 89]
21 [5, 2, 8, 21, 33, 27, 63, 100, 89]
5 [2, 5, 8, 21, 33, 27, 63, 100, 89]
5 win7+python3.5.1
>>>
'''

最新文章

  1. JS Select 月日日期联动
  2. (1)RGB-D SLAM系列- 工具篇(硬件+关键技术)
  3. ArrayList实现线程的几种方法
  4. nginx反向代理、优化
  5. ios开发 网络编程浅析(一)
  6. P1236 算24点
  7. Class org.apache.struts2.json.JSONWriter can not access a member of
  8. 使用libevent进行多线程socket编程demo
  9. client|server 最简单的聊天
  10. 后端分布式系列:分布式存储-HDFS Client 设计实现解析
  11. lArea.js 城市选择
  12. ASP.NET MVC 学习笔记-6.异步控制器
  13. 2、AngularJs 过滤器($filter)
  14. Linux 压缩归档
  15. LeetCode OJ 19. Remove Nth Node From End of List
  16. Android基础知识之屏幕兼容模式
  17. loj2541【PKUWC2018】猎人杀
  18. [ActionScript 3.0] 嵌入字体
  19. P4编程环境搭建
  20. C语言双链表遍历,插入,删除

热门文章

  1. SPRING-BOOT系列之Spring4快速入门
  2. 创建表规范 lob 字段
  3. 关于MyBatis的两种写法
  4. eclipse导入php项目
  5. 动手实现 React-redux(五):Provider
  6. 【转】深入理解Android中的SharedPreferences
  7. canvas基础绘制-绚丽时钟
  8. htm 中 &lt;b&gt;和&lt;strong&gt;的区别
  9. Github-Client(ANDROID)开源之旅(三) ------ 巧用ViewPagerIndicator
  10. xcode6的项目中虚拟键盘无法弹出