java排序

本文对比了插入排序、合并排序及快速排序三种算法在处理200000个随机double类型数据时的性能表现。插入排序耗时10.036秒,合并排序耗时0.471秒,快速排序耗时0.456秒。同时,还测试了改进后的快速排序算法,通过随机选取分割值的方式进一步提高了排序效率,耗时缩短至0.296秒。

针对一个200000大小的随机double数组进行排序
插入排序
对数组做for循环,每次找出当前位置到数组终点索引的最小值,与当前值比较并替换,时间复杂度n*n = O(n2)

插入排序 200000 长度数组,耗时 :10.036s

合并排序
将大数组分成两个小数组,依次递归分组,直到所有数组只有一个元素,然后,将数组按照顺序合并程大数组,依次合并得到最后结果,合并耗时O(n),分组耗时O(lgn),算法耗时O(nlgn)

合并排序 200000 长度数组,耗时 :0.471s

快速排序
从数组中取出最后一个数,将大于这个数的放在右边,小于这个数的放在左边,这个过程称为分割,然后分别对左边部分和右边部分分别递归分割,从而实现在原地排序,由于没有使用额外的内存来存放中间数组,因此此方法占用内存较少,分割所用时间O(n),当数组内数剧随机排列时递归次数为lgn,如果顺序排列则为n,因此算法平均耗时O(nlgn),如果随机取出一个数,则算法耗时O(nlgn)

快速排序 200000 长度数组,耗时 :0.456s

随机取值做分割的快速排序,这种算法在数组较大时分割的效果和使用最后一个值做分割的效果接近,但是在数组较小做分割时,使用最后一个数可能导致数组分割不均匀,导致分割的次数由lgn向n接近,从而降低算法的效率,这里做了测试,该算法的平均时间耗时0.3s

使用随机一个数据分割的快速排序200000 长度数组,耗时 :0.296s

代码

代码(收取1积分,我积分太少了,下载资源不够用。。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值