蓝桥杯——快速排序(2018JavaB组第5题9分)

快速排序(18JavaB5,9’)

以下代码可以从数组a[]中找出第k小的元素。

它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的。

请仔细阅读分析源码,填写划线部分缺失的内容。

import java.util.Random;
public class Main{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) return a[i];if(i - l + 1 < k) return quickSelect( _________________________________ ); //填空else 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));}
}

注意:只提交划线部分缺少的代码,不要抄写任何已经存在的代码或符号。


先看看典型的快速排序

快速排序

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序

它采用了一种分治(Divide-and-ConquerMethod)的策略

基本思想

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

1648799-20190715193629487-721157451.png

先把基准值(最左)存起来

高位(右)大的往左边拉

低位(左)小的往右边拉

最后,存的那个基准值(曾经最左)放中间

对左:相同处理

对右:相同处理

package bb;
public class QuickSortMy {static void printArray(int a[]) {for (int i : a) {System.out.print(i + "\t");}System.out.println();}static void qsort(int a[], int left, int right) {if (left >= right) {return;}printArray(a);int key = a[left];int i = left, j = right;while (i < j) {while (i < j && a[j] > key) {j--;}if (i < j) {System.out.printf("a[%d]=%d <- a[%d]=%d\n", i, a[i], j, a[j]);a[i++] = a[j];}while (i < j && a[i] < key) {i++;}if (i < j) {System.out.printf("a[%d]=%d -> a[%d]=%d\n", i, a[i], j, a[j]);a[j--] = a[i];}}a[i] = key;printArray(a);qsort(a, left, i - 1);qsort(a, i + 1, right);}public static void main(String[] args) {int a[] = { 3, 4, 5, 1, 2 };qsort(a, 0, a.length - 1);}
}

2018JavaB组第5题的参考答案+注释如下所示:

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));}
}

转载于:https://www.cnblogs.com/tigerlion/p/11190958.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于蝴蝶背景

Runner 2006-07-04 这些链接都比较久远了&#xff0c;现在大概都失效了。好像有不少人都是这两只可爱的蝴蝶带来的&#xff0c;看来这两只蝴蝶真是我的福星啊。这里再把Flash背景的用法贴出来吧.如果直接点击链接无法显示页面&#xff0c;可以把链接地址复制到浏览器的地址栏里…

html 文本横竖切换,(横竖屏切换/强制横屏)CSS3 transform 怎样才能中心旋转?

现在有一个canvas&#xff0c;我希望在(手机和平板)竖屏时能够把它以中心作为旋转原点旋转90(强制横屏)&#xff0c;但用了transform-origin&#xff0c;无论怎样设置数值都不能达到目的&#xff0c;是我哪里搞错了吗&#xff1f;附CSS代码&#xff1a;html, body{width: 100%;…

Echarts多任务可视化之再优化

1.上次进程可视化由svg实现&#xff0c;本次改用echarts框架实现。Js文件&#xff1a;loadxmldoc.js&#xff08;用于加载xml文档&#xff09;echarts.js&#xff08;用来实现有向图绘制&#xff09;2.思路&#xff1a;Echarts是定义数据对象数组data和连接对象数组links&#…

约 定

十天&#xff0c; 不能见面 &#xff0c;不能打电话或发短信 .这是我和她的约定.十天&#xff0c;要让一个深爱着她的男人去尊照这样的约定去做&#xff0c;实在是难以接受。虽然心里有一万个不愿意&#xff0c;但我知道 &#xff0c;我心里早以做出了选择.选择了我爱的&#x…

NIKE LEBRON 13 PERFORMANCE REVIEW

LeBron James signed a lifetime deal with Nike, cementing his already stable position as Nike’s current top endorser. That means it’s no surprise that Nike would use a person in such a position to help lead new innovative technology. But at times, Nike is…

我的专业我的梦作文计算机,我的创新我的梦作文

新时代&#xff0c;新变化。现在二十一世纪&#xff0c;人们都过上了幸福的生活&#xff0c;发明出来的日常用品&#xff0c;电子产品等等&#xff0c;都是根据人们创新的精神建造出来的。现在我们通过了学习&#xff0c;也渐渐体会到了创新的重要性。就像是在动画片中&#xf…

Ubuntu挂载新硬盘

1、加挂硬盘 Shell代码 复制代码sudo hdparm -I /dev/sdb 硬盘硬件安装后&#xff0c;此命令测试linux系统是否能找到挂载的未分区硬盘 2、创建分区 Shell代码 复制代码sudo fdisk /dev/sdb sda是第一块SCSI硬盘&#xff0c;sdb第二块&#xff0c;以此类推...物理分区使用a、b…

利用XML实现通用WEB报表打印 卢彦

利用XML实现通用WEB报表打印(1) 卢彦 摘要开发B/S结构的应用程序最头疼的问题可能就是报表打印了&#xff0c;由于只能采用浏览器来作为用户界面进行交互&#xff0c;所以不能精确控制客户端的打印机。而很多B/S结构的应用程序常常需要完成非常复杂的报表打印任务。而靠IE自带的…

增加新分类daily——“每天学了啥?”

如题转载于:https://www.cnblogs.com/sig3/p/3926538.html

现代计算机密码学阶段主要有两个方向,密码学技术读书笔记

关于密码学技术读书笔记一.密码学的介绍密码学(在西欧语文中&#xff0c;源于希腊语krypts“隐藏的”&#xff0c;和grphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究&#xff0c;常被认为是数学和计算机科学的分支&#xff0c;和信…

cascade rcnn论文总结

1.bouding box regression总结&#xff1a; rcnn使用l2-loss 首先明确l2-loss的计算规则&#xff1a; L∗(f∗(P)−G∗)2&#xff0c;∗代表x,y,w,h 整个loss : LLxLyLwLh 也就是说&#xff0c;按照l2-loss的公式分别计算x,y,w,h的loss&#xff0c;然后把4个loss相加就得到总的…

浅谈优化SQLServer数据库服务器内存配置的策略

引文 http://demo.nbarticle.com/view/2004/8/9/view_1827.htm 农业银行总行1998年以来正式推广了新版网络版综合业务统计信息系统&#xff0c;该系统是基于WindowsNT4.0平台&#xff0c;采用客户&#xff0f;服务器模式&#xff0c;以Microsoft SQL Server为基础建立起来的大…

知道第一章计算机基础知识作业答案,大学计算机基础作业答案

大学计算机基础作业答案第一章 现代社会与计算机1. 什么事信息&#xff0c;其主要特征是什么&#xff1f;答&#xff1a;信息是可传递和共享的&#xff0c;可消除人们认知上的不确定因素&#xff0c;对人们的决策具有现实或潜在价值的知识。特征&#xff1a;普遍性、依附性、共…

Netflix推荐系统(Part two)-系统架构

Netflix在2013年公布了自己推荐系统的架构&#xff0c;本文主要总结和翻译自System Architectures for Personalization and Recommendation&#xff0c;但这并不是一篇完整的翻译文章。 Overview 首先&#xff0c;我们在下图中提供推荐系统的整体系统图。 该体系结构的主要组件…

母版页可以动态切换吗?

通过设置“MasterPageFile”属性可以做到&#xff0c;然而这个属性只能在“Page_PreInit”事件之中或之前设置。在Page_PreInit事件或之前&#xff0c;当前页面包含的对象还没有被生成&#xff0c;不能访问&#xff0c;所以&#xff0c;如果想根据当前页面上某个控件的值动态切…

httpclient 多附件上传

多附件上传实例&#xff1a; /*** 多附件上传* param host* param uri* param attachment 附件* param param body参数* return*/public String upload(String host, String uri, Map<String,String> attachment, Map<String, String> param) {logger.info("…

加拿大大学 计算机专业排名2015,加拿大大学计算机专业排名top15

加拿大大学计算机专业排名。加拿大开设计算机专业的很多高校还提供带薪实习机会&#xff0c;吸引了众多国际学子前往留学。在加拿大计算机专业优秀的大学很多。同时&#xff0c;加拿大计算机专业排名在世界上也非常的靠前&#xff0c;在加拿大有很多大学值得广大计算机热爱者选…

如何读懂并写出装逼的函数式代码

今天在微博上看到了 有人分享了下面的这段函数式代码&#xff0c;我把代码贴到下面&#xff0c;不过我对原来的代码略有改动&#xff0c;对于函数式的版本&#xff0c;咋一看&#xff0c;的确令人非常费解&#xff0c;仔细看一下&#xff0c;你可能就晕掉了&#xff0c;似乎完全…

如何打通高薪的黄金通道 成为职场金领

身在职场的你&#xff0c;是否想过有朝一日能获得百万年薪&#xff1f;最近&#xff0c;央视二套绝对挑战特别节目巅峰营销的热播&#xff0c;引发各方人士对东风日产百万年薪招兵营销总监的关注。身价百万的营销总监人人想当&#xff0c;如何才能成为这样的职场金领&#xff0…

iView 实战系列教程(21课时)_2.iView 实战教程之导航、路由、鉴权篇

在c盘创建一个iview-router的项目、然后使用默认的配置跳过添加vue-router的插件编译我们的文件。编译好之后&#xff0c;我们启动App默认的页面就打开了。默认两个路由一个是about界面一个是home我们使用编辑器打开代码&#xff0c;用我们的iview的menu组件替换掉这两个路由在…