为了账号安全,请及时绑定邮箱和手机立即绑定

测试排序的效率,为什么:希尔排序>归并排序>快速排序?

测试排序的效率,为什么:希尔排序>归并排序>快速排序?

拉丁的传说 2019-03-22 12:15:11
我看看几篇排序的算法的文章,大家都说效率一般都是:快速排序>归并排序>希尔排序然后就用java自己动手测了一下,测试结果却是:希尔排序>归并排序>快速排序而且当数据量过大时,归并排序 和 快速排序 会出现栈溢出. 以下是我写的源代码,请帮我分析一下是什么原因? package com.test; import java.util.Arrays; import java.util.Random; public class Sort {     public static void main(String[] args) {         int[] arr = new int[400000];         Random r = new Random();         long start, end;         init(arr, r);         System.out.print("希尔排序...");         start = System.currentTimeMillis();         sort1(arr);         end = System.currentTimeMillis();         System.out.println("完成" + (end - start));         //System.out.println(Arrays.toString(arr));         init(arr, r);         System.out.print("归并排序...");         start = System.currentTimeMillis();         arr = sort2(arr, 0, arr.length - 1);         end = System.currentTimeMillis();         System.out.println("完成" + (end - start));         //System.out.println(Arrays.toString(arr));         init(arr, r);         System.out.print("快速排序...");         start = System.currentTimeMillis();         sort3(arr, 0, arr.length - 1);         end = System.currentTimeMillis();         System.out.println("完成" + (end - start));         //System.out.println(Arrays.toString(arr));     }     /**      * 初始化      */     private static void init(int[] arr, Random r) {         System.out.print("\n初始化...");         for (int i = 0; i < arr.length; i++) {             arr[i] = r.nextInt(100);         }         //System.out.println("\n" + Arrays.toString(arr));     } 运行结果如下: 初始化...希尔排序...完成40初始化...归并排序...完成53初始化...快速排序...完成1411
查看完整描述

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

排序效率根本就不能单纯的说哪种比哪种高吧,建议看看算法导论


查看完整回答
反对 回复 2019-04-26
?
largeQ

TA贡献2039条经验 获得超7个赞

因为你的数据量太大40万条,当数据量很大时快速排序就不是最快的了。而且排序应该用一个数组


查看完整回答
反对 回复 2019-04-26
  • 3 回答
  • 0 关注
  • 1423 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信