java三路快排,java二路快排很慢

老师,以下是我二路快排的java代码

public class quickSortTwoway {

public quickSortTwoway() {};

public static void quickSort(Integer[] arr) {

__quickSort(arr, 0, arr.length - 1);

}

private static void __quickSort(Integer[] arr, int l, int r) {

if(l >= r) return;

int p = __partition(arr, l, r);

__quickSort(arr, l, p - 1);

__quickSort(arr, p + 1, r);

}

private static int __partition(Integer[] arr, int l, int r) {

swap(arr, l, (int)(Math.random() * (r - l + 1)) + l);

Integer pivot = arr[l];

int p1 = l + 1, p2 = r;

while(true) {

while(p1 <= r && arr[p1].compareTo(pivot) < 0) p1++;

while(p2 >= l + 1 && arr[p2].compareTo(pivot) > 0) p2--;

if(p1 >= p2) break;

swap(arr, p1, p2);

p1++;

p2--;

}

swap(arr, p2, l);

return p2;

}

private static void swap(Integer[] arr, int i, int j) {

Integer tmp = arr[i];

arr[i] = arr[j];

arr[j] = tmp;

}

}

代码听完您的课以后自己实现了一遍,但是发现二路很慢,我的结果如下:

Test for random array, size = 1000000 , random range [0, 1000000]

quickSortTwoway : 228ms

quickSortNaive : 0ms

Test for nearly ordered array, size = 1000000 , swap time = 100

quickSortTwoway : 211ms

quickSortNaive : 0ms

但是我用普通naive的快排,可以很快完成,请问老师为啥呢?还是我代码出了问题?

我跑了您的github上的代码,测试了merge,quicksort,quicksort2way,结果如下:

Test for random array, size = 1000000 , random range [0, 1000000]

MergeSort : 475ms

QuickSort2Ways : 358ms

QuickSort : 402ms

Test for nearly ordered array, size = 1000000 , swap time = 100

MergeSort : 119ms

QuickSort2Ways : 48ms

QuickSort : 218ms

Test for random array, size = 1000000 , random range [0,10]

MergeSort : 354ms

QuickSort2Ways : 205ms

java.lang.reflect.InvocationTargetException

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:564)

at bobo.algo.SortTestHelper.testSort(SortTestHelper.java:81)

at bobo.algo.Main.main(Main.java:52)

Caused by: java.lang.StackOverflowError

at bobo.algo.QuickSort.sort(QuickSort.java:36)

at bobo.algo.QuickSort.sort(QuickSort.java:41)

at bobo.algo.QuickSort.sort(QuickSort.java:42)

您的naive quick sort在有大量重复元素的时候会溢出,但是quicksort2way没事, 感觉很奇怪,您的quicksort naive也有时间,我的就是0ms,和ide有关吗?您的代码我在eclipse里面跑的,我自己在terminal里面写的

更新,老师我听了三路快排后实现了一遍,发现三路快排更慢,不知道啥原因,以下是结果:

Test for random array, size = 1000000 , random range [0, 1000000]

quickSortTwoway : 245ms

quickSortNaive : 0ms

quickSortThreeway : 604ms

Test for nearly ordered array, size = 1000000 , swap time = 100

quickSortTwoway : 219ms

quickSortNaive : 0ms

java.lang.reflect.InvocationTargetException

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:564)

at SortTestHelper.testSort(SortTestHelper.java:80)

at Main.main(Main.java:38)

Caused by: java.lang.StackOverflowError

at quickSortThreeway.__quickSort(quickSortThreeway.java:9)

at quickSortThreeway.__quickSort(quickSortThreeway.java:10)

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

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

相关文章

Web开发常出现的错误[个人收集]

获取DataGrid中的每行中的第一行的第一个textbox (有点老&#xff0c;但用的到) publicabstractclassHelper { publicclassConvert { publicstaticTextBox ToTextBox(Control control) { TextBox tb control asTextBox; …

系统分析师资料_如何成为一名数据分析师?

随着大数据的逐渐普及&#xff0c;数据分析越来越普遍应用到各个职能岗位&#xff0c;也就是说&#xff0c;不论你在哪个行业&#xff0c;都会需要数据分析技能。数据岗位的薪资水涨船高&#xff0c;成为目前最有潜力的职业选择之一。根据猎聘发布《猎聘2019年中国AI&大数据…

matlab中ode45如何设置,如何使用Matlab中的ode45修正赋值错误(ode45函数的第488行)

我正在写一个脚本ode45为了整合卫星在火星附近双曲线轨道上的运动方程.我需要整合地球上的整个通道:从SOI半径开始(576000km)向行星前进,然后穿过大气层直到卫星到达opposite“大气边界(设置在250km从表面)。当它接收到输入A时tspan比大约高200000秒(我需要大约400000秒),Matla…

PL/SQL Developer 使用技巧小结(转)

1&#xff0c;右键菜单在PL/SQL Developer&#xff08;下面简称PLD&#xff09;中的每一个文本编辑窗口&#xff0c;如SQL Window&#xff0c;Command Window和Porgram Window&#xff0c;右键点击某个对象名称&#xff0c;会弹出一个包含操作对象命令的菜单&#xff0c;我们这…

设置文本区域大小_数据验证基本设置技巧

数据验证可以规范用户的文本及数字输入格式&#xff0c;如只能输入指定区间的数值、只能输入文本数据、限制输入空格、限制输入重复值等。设置了数据验证条件后&#xff0c;对符合条件的数据允许输入&#xff0c;对不符合条件的数据则禁止输入。因此&#xff0c;利用此设置可以…

丁丁的生日

7月1日是丁丁的生日&#xff0c;本来计划得很好&#xff0c;下午去给他照相&#xff0c;晚上请一家人吃个饭&#xff0c;然后再去看《变形金刚2》&#xff08;当然这个没有丁丁的份&#xff09;。 谁知道计划真的赶不上变化&#xff0c;本来好好的丁丁上午突然有些低热-37.8&am…

mysql5.7修改root密码_七小服公开课EMC isilon修改丢失的root密码

1、连接串口&#xff0c;并重启2、在终端上&#xff0c;当引导过程中看到如下提示符时&#xff0c;按下空格键:Hit [Enter] to boot immediately, or any other key for command prompt.3、在OK提示符下&#xff0c;运行以下命令:boot -s4、看到 "Enter full pathname of …

textbox matlab,matlab gui 编程文本框更新

本帖最后由 350954832 于 2014-12-6 07:38 编辑我也是个新学matlab的菜鸟&#xff0c;有些东西也是不是特别的明白&#xff0c;这个程序本来是一个界面 我想通过点击运行按钮&#xff0c;在左边的文本框里面显示te1这个数组&#xff0c;但是点击运行这个按钮以后文本框没有更新…

张向东:就以当年期望别人对我们那样的方式

这几天&#xff0c;在北京广州办公室的电梯里&#xff0c;不断遇到来报道的新同事&#xff0c;又开心又担心。开心当然是新同事加入&#xff0c;担心是因为很多方面&#xff0c;我们还在学习中&#xff0c;团队文化、职业化程度都还不够&#xff0c;特别对刚刚毕业的大学生来说…

python怎么看内置模块_Python的内置模块详解

一、什么是模块模块就是封装了一些列功能的py文件&#xff0c;我们使用的时候直接导入这个文件&#xff0c;通过传入参数的方式使用其他文件的功能函数二、模块有哪些内置模块自定义模块第三方模块三、如何导入模块导入模块分为4种&#xff1a;1 #导入模块2 importmode_test3 #…

matlab人工神经网络代码,咨询BP人工神经网络MATLAB实例代码

我想用BP人工神经网络做个预测&#xff0c;已知2000-2012的值&#xff0c;预测2013-2020年的&#xff0c;数据如下&#xff1a;0.410.430.440.450.500.510.550.610.650.610.670.750.72用前三年的预测第四年的&#xff0c;写了MATLAB代码&#xff0c;但效果不好&#xff0c;所以…

[转]SQL语句资料

--语 句 功 能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据定义CREATE TABLE --创建一个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表结构CREATE …

python函数 global_Python global全局变量函数详解

global语句的作用在编写程序的时候&#xff0c;如果想为一个在函数外的变量重新赋值&#xff0c;并且这个变量会作用于许多函数中时&#xff0c;就需要告诉python这个变量的作用域是全局变量。此时用global语句就可以变成这个任务&#xff0c;也就是说没有用global语句的情况下…

服务器php只显示文本,服务器上的php echos文件是文本而不是二进制文件

我编写了一个PHP页面,它读取一个文件,并在添加了一些头文件后对其进行回显:header(Content-disposition: filename" . $fname . ");header(Pragma: no-cache);header(Expires: 0);header(Cache-Control: must-revalidate, post-check0, pre-check0);header(Pragma: p…

vc 6.0 显示文件全路径_配送路径规划思考(十二)

前面十一集的链接配送路径规划思考(十一)配送路径规划思考(十)配送路径规划思考(九)配送路径规划思考(八)配送路径规划思考(七)配送路径规划思考(六)配送路径规划思考(五)配送路径规划思考(四)配送路径规划思考(三)配送路径规划思考(二)配送最短路径思考(一)思考(十一)分享了政…

怎么暂时关闭网站php,WordPress怎么临时关闭网站进行维护

有时可能会因为各种原因导致我们的网站出现访问错误&#xff0c;此时我们就需要临时关闭站点进行维护&#xff0c;那么我们该如何临时关闭站点进行维护呢&#xff1f;下面让我们来看一下如何临时关闭我们的站点吧。1、.maintenance法在WordPress根目录下新建一个名为.maintenan…

DataList控件分页

实现了对DataList的分页 HTML控件的值需要转换web应用程序就可以取到了 1 /**//// <summary> 2 /// 当前页数 3 /// </summary> 4 int CurrentPage; 5 /**//// <summary> 6 /// 每页条数 7 /// </summa…

现代php 阅读笔记,PHP 手册阅读笔记 - 语言参考篇

最近计划把 PHP手册&#xff0c;认真的先过一遍。记录一些以前不知道&#xff0c;不明确的知识。语言参考 > 类型【新认知】强制转换类型用 settype( mixed $var, string $type )。判断变量的类型用is_type函数。例如&#xff1a;if (is_int($an_int)) {$an_int 4;}if (is_…

mongodb连接失败_mongodb 数据库及数据分页

本文转载于 SegmentFault 社区作者&#xff1a;小小蚊子在做自己的一个小项目时&#xff0c;新学习了 mongodb非关系型数据库&#xff0c;使用了 mongoose封装好的查询方法&#xff0c;包括数据库分页用到的limit和 skip 方法&#xff0c;这里记录下。一mongodb 数据库连接参照…

python 去除空格和换行,删除空格和换行符-BeautifulSoup Python

使用Beautifulsoup&#xff0c;我正在抓取以下Web源&#xff1a;Manchester Citys Fabian Delph limped off in the first minute of England Euro 2016 qualifier against Switzerland with a suspected hamstring injury. The 25-year-old midfielder, who signed for City f…