前言:
答案:a, i + 1, r, k - (i - l + 1)
首先分享一篇讲快速排序的,讲的可好了!浅显易懂,值得一看~
快速排序
一份有注释的代码:

public class Demo5 {// 以下代码可以从数组a[]中找出第k小的元素。public static int quickSelect(int a[], int l, int r, int k) {// 1、随机选择一个元素作为基准元素(此时选择的基准元素为x)Random rand = new Random();int p = rand.nextInt(r - l + 1) + l;int x = a[p];// 这里令我们随机选择的元素a[p]与数组最右端的元素a[r]互换int tmp = a[p];a[p] = a[r];a[r] = tmp;// 2、相当于设置两个指针i和j,i为左指针,j为右指针,它们分别指向数组最左和最右的元素int i = l, j = r;while (i < j) {//3、将左指针指向的元素与基准元素相比较,如果左指针指向的元素小于基准元素,则左指针向右移动一位while (i < j && a[i] < x)i++;//4、通过上一步的移动,左指针左边的元素全部比基准元素小,令数组最右的元素(此时的数组最右的元素等于基准元素x)等于此时左指针指向的元素,右指针向左移动一位,此时的a[j]大于等于xif (i < j) {a[j] = a[i];j--;} //5、将右指针指向的元素与基准元素相比较,如果右指针指向的元素大于基准元素,则右指针向左移动一位while (i < j && a[j] > x)j--;//6、通过上一步的移动,右指针右边的元素全部比基准元素大,令左指针指向的元素等于此时右指针指向的元素,左指针向右移动一位,此时的a[i]小于等于xif (i < j) {a[i] = a[j];i++;} }//7、通过步骤3、4、5、6后,可以确定a[i]的位置就是我们选择的基准元素排序后应该所在的位置a[i] = x;//8、令基准元素位置的索引i等于pp = i;//9、通过算式i - l + 1得到的是在数组中第几小的元素,若它等于k,则得到题目要求的数组a[]中第k小的元素if (i - l + 1 == k)return a[i];//若小于k,即我们所求的元素在i的右边,此时左指针指向的元素为a[p+1],右指针指向的元素依旧是a[r],所求第k小的元素变为第k - (i - l + 1)小if (i - l + 1 < k)return quickSelect(a, i + 1, r, k - (i - l + 1)); // 填空else//若大于k,即我们所求的元素在i的左边,此时左指针指向的元素为认为a[l],右指针指向的元素为a[i-1],仍旧是求第k小的元素return quickSelect(a, l, i - 1, k);}public static void main(String args[]) {int[] a = { 1, 4, 2, 8, 5, 7 };System.out.println(quickSelect(a, 0, 5, 4));}}

第九届蓝桥杯快速排序java相关推荐

  1. Java实现第九届蓝桥杯快速排序

    快速排序 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码,填写划线部分缺失的内容. package bb; impor ...

  2. 2018第九届蓝桥杯-决赛-Java大学-C组

    标题:年龄问题 s夫人一向很神秘.这会儿有人问起她的年龄,她想了想说: "20年前,我丈夫的年龄刚好是我的2倍,而现在他的年龄刚好是我的1.5倍". 你能算出s夫人现在的年龄吗? ...

  3. 第九届蓝桥杯省赛——明码

    题目: 标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛. 16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. 一个字节可以存储8位信息,用32 ...

  4. 2018省赛第九届蓝桥杯真题C语言B组第五题题解 快速排序

    2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:快速排序. 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码, ...

  5. 蓝桥杯JAVA答题技巧,第九届蓝桥杯大赛个人赛省赛(软件类)C/C++ 大学B组比赛心得(还在更新)...

    第九届蓝桥杯大赛个人赛省赛(软件类)C/C++ 大学B组 考生须知: 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题. 考试时间为4小时.时间截止后,提交答案无效. 在考试强制结束 ...

  6. 关于2018年第九届蓝桥杯省赛(江苏赛区)

    为啥到现在才写呢...就是懒,是真的懒.题也没刷几个 (下面题目的超链接转自这里,并不是本人解法..只是因为有题目还有题解) 4.1举行的蓝桥杯也可以说是"愚人杯"了 早早的跟同学 ...

  7. 2018年第九届蓝桥杯 JavaB组省赛 刷题思路及答案

    前言 本人是二本院校大二的计算机系学生,已经报名了下一届的蓝桥杯省赛,整个寒假学习了很多算法知识,我是看<算法很美>这个课程学习算法的,一套学习下来确实受益匪浅,视频在b站上面都有. 此前 ...

  8. 2018第九届蓝桥杯JavaB组省赛真题及详解

    2018第九届蓝桥杯JavaB组省赛真题及详解 第一题:第几天 第二题:方格计数 第三题:复数幂 第四题:测试次数 第五题:快速排序 第六题:递增三元组 第七题:螺旋折线 第八题:日志统计 第九题:全 ...

  9. problem b: 一年中的第几天_第九届蓝桥杯B组试题

    1. 标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. "============= ...

  10. 第九届蓝桥杯C++B组

    第九届蓝桥杯C++B组C++与python解法 1.标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余 ...

最新文章

  1. java中集合和数据库中_java中list集合的内容,如何使用像数据库中group by形式那样排序...
  2. Photoshop CS6软件安装教程
  3. java resume过时方法_面试官没想到,一个 Java 线程生命周期,我可以扯半小时
  4. 身边的设计模式(一):单例 与 RedisCacheManager
  5. MySql某一列累计查询
  6. iOS初级开发学习笔记:APP生命周期的学习总结
  7. 力扣题目——160. 相交链表
  8. ST-Link驱动安装
  9. 安装tcpreplay时报错:configure: error: libdnet not found
  10. UNI-APP实现扫描二维码
  11. 趋势linux版本杀毒软件,万万没想到,微软 Linux 版杀软来了
  12. 巴别鱼雏形,谷歌推出端到端语音翻译技术,还能模仿你说话
  13. 【荐】JS实现类似星球仿flash效果的动态菜单
  14. 520表白网站(附源码与修改教程)
  15. 如何快速记忆C语言运算符,C语言运算符快速记忆法
  16. librosa重采样和声道设置
  17. 树上差分的整理(点的树上差分和边的树上差分)
  18. iqq for linux源代码,开源qq下载-Linux开源QQ 2012(iQQ)下载 v1.0.2 免费版-IT猫扑网
  19. 高中数学数列公式7种方法(方法全,例子全,归纳细)
  20. unity3d教程手册首选项

热门文章

  1. weblogic安装部署升级小结
  2. SQL Server 2008 R2安装功能选择
  3. SONiC testbed
  4. android转移数据到苹果手机号码,苹果电话号码怎么转到新手机(简单教你两招轻松搞定)...
  5. 服务器端移动端车牌识别sdk
  6. 论文相关-论文写作-图片色卡
  7. 超市管理系统具体模块
  8. vue使用jsMind思维导图类库
  9. 优化算法|蚁群算法的理解及实现
  10. php是一种通用开源,caozha-admin(PHP网站后台管理框架)