算法代码实现之选出第k小元素、中位数、最小的k个元素(线性复杂度),Golang(Go语言)实现
2016-03-02 21:25
1291 查看
封装成函数:
测试:
输出:
0
4
[01234]
//选出第k小元素,k为1~len(s)
funcSelectKthMin(s[]int,kint)int{
k--
lo,hi:=0,len(s)-1
for{
j:=partition(s,lo,hi)
ifj<k{
lo=j+1
}elseifj>k{
hi=j-1
}else{
returns[k]
}
}
}
//选出中位数(比一半的元素小,比另一半的大)
funcSelectMid(s[]int)int{
returnSelectKthMin(s,len(s)/2)
}
//选出k个最小元素,k为1~len(s)
funcSelectKMin(s[]int,kint)[]int{
lo,hi:=0,len(s)-1
for{
j:=partition(s,lo,hi)
ifj<k{
lo=j+1
}elseifj>k{
hi=j-1
}else{
returns[:k]
}
}
}
funcpartition(s[]int,lo,hiint)int{
i,j:=lo,hi+1
for{
for{
i++
ifi==hi||s[i]>s[lo]{
break
}
}
for{
j--
ifj==lo||s[j]<=s[lo]{
break
}
}
ifi>=j{
break
}
swap(s,i,j)
}
swap(s,lo,j)
returnj
}
funcswap(s[]int,iint,jint){
s[i],s[j]=s[j],s[i]
}
测试:
s:=[]int{9,0,6,5,8,2,1,7,4,3}
fmt.Println(SelectKthMin(s,1))//第1小元素:0
fmt.Println(SelectMid(s))//中位数:4
fmt.Println(SelectKMin(s,5))//最小的5个数:0~4
输出:
0
4
[01234]
相关文章推荐
- 前期准备与Django新建项目
- GoldenGate常见异常处理
- django最佳实践:项目布局
- 【uWSGI】实战之Django配置经验
- 【uWSGI】实战之Django配置经验
- 分辨率验证工具 - 【Window Resizer】的使用 - Google扩展工具
- Mongo读书笔记2 -- 数据类型
- Google推荐的图片加载库Glide介绍
- .ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to
- Google Guava Cache:本地缓存,过期实现
- Golang在视频直播平台的高性能实践
- Django~学习计划
- Django~待解决的问题
- Django~Databases
- [golang note] 函数定义
- google大法!
- django的模板页面里,如何获取一个集合的数据?
- golang笔记——struct
- 64.View the Exhibit and examine the data in the PROMO_CATEGORY and PROMO_COST columns of
- Windows 下用 gogs 配置局域网 git server