java排序

来源:互联网 发布:电力数据库 编辑:程序博客网 时间:2024/06/05 03:20

针对一个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积分,我积分太少了,下载资源不够用。。)

原创粉丝点击