Java实现第九届蓝桥杯快速排序
快速排序
以下代码可以从数组a[]中找出第k小的元素。
它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的。
请仔细阅读分析源码,填写划线部分缺失的内容。
package bb;
import java.util.Random;
public class JB18_5快速排序 {public static int quickSelect(int a[], int l, int r, int k) {Random rand = new Random();int p = rand.nextInt(r - l + 1) + l;int x = a[p];int tmp = a[p];a[p] = a[r];a[r] = tmp;int i = l, j = r;while (i < j) {while (i < j && a[i] < x)i++;if (i < j) {a[j] = a[i];j--;}while (i < j && a[j] > x)j--;if (i < j) {a[i] = a[j];i++;}}a[i] = x;p = i;if (i - l + 1 == k)// (1)说明到底了return a[i];if (i - l + 1 < k)return quickSelect(a, i + 1, r, k - i + l - 1); // 填空// qsort(a, i + 1, right);// (3)先试试k,// (4)再考虑:k要移动到等于(i - l + 1),试试k-(i - l + 1)else// i - l + 1 > kreturn quickSelect(a, l, i - 1, k);// (2)qsort(a, left, 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));// int [] a = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12, 2};// System.out.println(quickSelect(a, 0, a.length-1, 6));}
}
Java实现第九届蓝桥杯快速排序相关推荐
- Java实现第九届蓝桥杯小朋友崇拜圈
小朋友崇拜圈 题目描述 班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己). 在一个游戏中,需要小朋友坐一个圈, 每个小朋友都有自己最崇拜的小朋友在他的右手边. 求满足条件的圈最大多少人 ...
- Java实现第九届蓝桥杯螺旋折线
螺旋折线 题目描述 如图p1.pgn所示的螺旋折线经过平面上所有整点恰好一次. 对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度. 例如dis(0 ...
- Java实现第九届蓝桥杯付账问题
付账问题 题目描述 [题目描述] 几个人一起出去吃饭是常有的事.但在结帐的时候,常常会出现一些争执. 现在有 n 个人出去吃饭,他们总共消费了 S 元.其中第 i 个人带了 ai 元.幸运的是,所有人 ...
- Java实现第九届蓝桥杯第几天
第几天 题目描述 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. import java.util.Cal ...
- Java实现第九届蓝桥杯三体攻击
三体攻击 [题目描述] 三体人将对地球发起攻击.为了抵御攻击,地球人派出了 A × B × C 艘战舰,在太空中排成一个 A 层 B 行 C 列的立方体.其中,第 i 层第 j 行第 k 列的战舰(记 ...
- Java实现第九届蓝桥杯字母阵列
字母阵列 题目描述 仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:"LANQIAO". SLANQIAO ZOEXCCGB MOAYWKHI BCCIPLJQ SLAN ...
- java实现第九届蓝桥杯三角形面积
三角形面积 小明最近在玩一款游戏.对游戏中的防御力很感兴趣. 我们认为直接影响防御的参数为"防御性能",记作d,而面板上有两个防御值A和B,与d成对数关系,A=2^d,B=3^d( ...
- Java实现第九届蓝桥杯哪天返回
哪天返回 题目描述 小明被不明势力劫持.后被扔到x星站再无问津.小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文. 他决定在x星战打工.好心的老板答应包食宿,第1天给他1元钱. 并且 ...
- Java实现第九届蓝桥杯乘积为零
乘积为零 如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零? 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 61 ...
最新文章
- 网页缩放zoom用法
- select选择框变得可以输入、编辑
- mysql 导出数据为csv格式
- 【ARM】ARM汇编程序设计(六) stm和ldm
- JavaFX UI控件教程(十九)之Hyperlink
- servlet中url-pattern之/与/*的区别
- linux 用脚本建分区,脚本创建磁盘分区
- 他高考数学仅得15分,清华校长复查后激动拍板:这名学生,我要了
- FPGA基础入门篇(四) 边沿检测电路
- udp客户端 Java_java UDP通信客户端与服务器端实例分析
- 毕业论文学术报告答辩开题报告PPT模板
- 单片机第1季:零基础学51单片机-蜂鸣器介绍
- linux安装sas raid驱动,windows 2008 安装raid驱动|windows 2008安装sas硬盘驱动
- e430c参数 thinkpad_联想ThinkPad E430c(33651E1)
- iOS 9.3.5 越狱
- 机动车尾气排放智能抓拍解决应用方案
- 大型软件开发中的流程与规范
- 管理分区表:拆分、添加与交换分区
- 电商销量预测方法综述
- 倍福---CNC系统介绍
热门文章
- Mysql官方网站到底该如何下载、安装?(超详细教程)
- UG CAM API 二次开发批量创建程序组的功能写法,提供一个初始的程序组名进行批量创建
- Linux常用工具介绍
- python解决哲学家就餐问题(and型信号量)
- 关于虚拟专用网的一些概念
- matlab 色块图,matlab绘制矩阵色块图
- Glidedsky系列—爬虫CSS反爬
- ironpython调用c dll_IronPython.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...
- C语言的指针\数组用图解一次搞懂
- VUE超超超!入门介绍