AcWing 786. 第k个数
原题链接
简单
作者:
一只鱼
,
2021-04-18 21:21:11
,
所有人可见
,
阅读 293
第k个数-golang
package main
import (
"fmt"
"log"
)
func main() {
var n, k int
fmt.Scanf("%d\n", &n)
fmt.Scanf("%d\n", &k)
q := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scanf("%d", &q[i])
}
quickSelect(q, 0, len(q)-1, k)
log.Println(q[k-1])
}
func quickSelect(data []int, l, r, k int) {
if l >= r{
return
}
x := data[(l+r)>>1]
i, j := l-1, r+1
for i < j{
for{
i++
if data[i] >= x{
break
}
}
for {
j--
if data[j] <= x{
break
}
}
if i < j{
data[i], data[j] = data[j], data[i]
}
}
if j >= k{
quickSelect(data, l, j, k)
}else {
quickSelect(data, j+1, r, k)
}
return
}