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

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

 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);
        }
    }

是快速排序

具体来说,它定义了一个名为 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)。因此,当数据规模较大时,快速排序可能会比希尔排序更快。

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

希尔排序是一种插入排序,它使用了插入排序的思想,在插入排序的基础上提高了效率。它首先将数组分成若干个较小的数组,然后将这些数组进行插入排序。希尔排序的时间复杂度取决于数组的状态。对于大多数的数组,希尔排序的时间复杂度为 O(n^1.3)。

快速排序是一种分治算法,它使用了分治的思想,将数组递归地划分为两个较小的子数组,并对这两个子数组进行递归排序。快速排序的时间复杂度取决于数组的状态。对于大多数的数组,快速排序的时间复杂度为 O(nlogn)。

当数据规模较小时,希尔排序和快速排序的效率差不多。但是当数规模较大时,快速排序的效率要高于希尔排序。

你这段代码中,你使用了随机数生成器生成了8000000个数字来排序。你发现快速排序的运行时间比希尔排序要长,是因为你的场景下可能快速排序的时间复杂度比希尔排序的时间复杂度略高。

  • 快速排序的时间复杂度是O(nlogn),希尔排序的时间复杂度是O(n^1.3) ~ O(n^2)。
  • 这意味着,在数据规模比较大的情况下,快速排序的运行时间可能略微长于希尔排序。

但是,这并不意味着快速排序就是一个比较慢的算法。实际上,快速排序是一种非常快速的排序算法,在多数情况下都能较快地对数据进行排序。