博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
寻找第K小的数。
阅读量:4609 次
发布时间:2019-06-09

本文共 981 字,大约阅读时间需要 3 分钟。

思想,利用快排思想,不断寻找分解点,将分界点的下标与K-1比较如果相等,返回该值,否则更新左右边界。当左右边界中的值少于等于2个时,运用插入排序,返回a[k-1]

int findCut(vector
& a, int l, int r){ if (l + 1 >= r) { return -1; } int pivot = a[l]; int i = l, j = r; while (true) { do { i++; } while (i
< pivot); do { j--; } while (j>l&&a[j] >= pivot); if (i >= j)break; int temp = a[i]; a[i] = a[j]; a[j] = temp; } a[l] = a[j]; a[j] = pivot; return j;}void insert_sort(vector
&a, int l, int r){ for (int i = l + 1; i < r; i++) { int j=i,pivot = a[i]; while (j>l&&pivot < a[j-1]) { a[j] = a[j - 1]; j--; } a[j] = pivot; }}int findKth(vector
a, int n, int K){ int left = 0, right = n; while (left+1 < right) { int cut = findCut(a, left, right); if (cut == K - 1)return a[cut]; else if (cut < K - 1) { left = cut + 1; } else { right = cut; } } insert_sort(a, left, right); return a[K-1];}

  

转载于:https://www.cnblogs.com/jinweiseu/p/5405979.html

你可能感兴趣的文章
PostgreSQL 务实应用(二/5)插入冲突
查看>>
一种公众号回复关键词机制
查看>>
java多线程入门学习(一)
查看>>
基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!
查看>>
nyist oj 138 找球号(二)(hash 表+位运算)
查看>>
Movidius软件手册阅读 2017-09-04
查看>>
ytu 1910:字符统计(水题)
查看>>
201671030110 姜佳宇 实验三作业互评与改进
查看>>
mysql-5.6.15 开启二进制文件
查看>>
python的沙盒环境--virtualenv
查看>>
软件自动化测试——入门、进阶与实战
查看>>
BZOJ1878 [SDOI2009]HH的项链 树状数组 或 莫队
查看>>
BZOJ3675 [Apio2014]序列分割 动态规划 斜率优化
查看>>
2016.10.24 继续学习
查看>>
产品功能对标 - 服务授权管理
查看>>
各地IT薪资待遇讨论
查看>>
splay入门
查看>>
带CookieContainer进行post
查看>>
C语言学习笔记--字符串
查看>>
CSS-上下文选择器
查看>>