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