迟醉_ 2022-12-30 16:03 采纳率: 86.8%
浏览 32
已结题

这是快速排序吗,为什么比希尔排序慢很多啊

希尔排序大概三秒,这个运行了很长时间没出结果

 public static void main(String[] args) {
        //int[] arr = {-9, 78, 0, 23, -567};
        int[] arr = new int[8000000];
        for (int i = 0; i < 8000000; i++) {
            arr[i] = (int)(Math.random() * 800000);
        }
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
        String format = simpleDateFormat.format(date);
        System.out.println(format);
        
        quick_Sort(arr, 0, arr.length - 1);
        
        Date date1 = new Date();
        String format1 = simpleDateFormat.format(date1);
        System.out.println(format1);
        //System.out.println(Arrays.toString(arr));

    }


    public static void quick_Sort(int[] arr, int low, int high) {
        int i = low;
        int temp;
        if (low < high) {
            int pivot = arr[high];
            for (int j = low; j < high; j++) {
                if (arr[j] < pivot) {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                    i++;
                }
            }
            arr[high] = arr[i];
            arr[i] = pivot;
            quick_Sort(arr, 0, i - 1);
            quick_Sort(arr, i + 1, high);
        }
    }

  • 写回答

4条回答 默认 最新

  • 专注算法的马里奥学长 人工智能领域新星创作者 2022-12-30 16:31
    关注

    是快速排序

    具体来说,它定义了一个名为 quick_Sort 的方法,该方法接收三个参数:一个整型数组 arr、一个整型变量 low 和一个整型变量 high。它会递归地对数组 arr 的一个子序列进行排序,这个子序列的范围是从 low 到 high 的位置。

    在 quick_Sort 方法中,它首先选择数组 arr 的最后一个元素作为 pivot(枢轴),然后使用双重循环来排序数组 arr。在内层循环中,它会检查数组 arr 中每个元素是否小于 pivot,如果是,就将该元素移到 pivot 前面。最后,它会将 pivot 放到最终的正确位置,然后递归地对 pivot 左边和右边的子序列进行快速排序。

    在 main 方法中,它会创建一个长度为 8000000 的整型数组,并使用随机数填充数组。然后它会调用 quick_Sort 方法对数组进行排序,并使用 Date 和 SimpleDateFormat 类来打印排序开始和结束的时间。

    **快速排序和希尔排序都是比较快速的排序算法,但是快速排序可能比希尔排序略慢一些。

    原因可能是,快速排序是一种递归算法,它通常需要调用自身来对子序列进行排序。这意味着,在执行快速排序的过程中,会有大量的函数调用和返回操作,这会带来额外的时间开销。

    相比之下,希尔排序是一种迭代算法,它通常不需要调用自身来对子序列进行排序。它只需要使用一个循环来排序整个序列,因此可能会比快速排序略快一些。

    另外,快速排序和希尔排序在处理大型数据集时的性能也有所不同。快速排序的平均时间复杂度是 O(nlogn),希尔排序的平均时间复杂度是 O(n^1.3)。因此,当数据规模较大时,快速排序可能会比希尔排序更快。

    总的来说,快速排序和希尔排序都是高效的排序算法,在不同的场景下,其性能可能会有所差异。因此,在选择排序算法时,应该根据实际情况进行选择。**

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 已采纳回答 12月30日
  • 创建了问题 12月30日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助