快速排序算法-中位数三

富有的

我有以下快速排序算法,该算法使用最左边的数据作为枢纽,效果很好:

public static void QuickSortLeft(int[] array, int start, int end)
{
    int left = start;
    int right = end;

    int pivot = array[start];

    while (left <= right)
    {
        while (array[left] < pivot)
        {
            left++;
        }

        while (array[right] > pivot)
        {
            right--;
        }

        if (left <= right)
        {
            swap(array,left, right);

            left++;
            right--;
        }
    }

    // Recursive calls
    if (start < right)
    {
        QuickSortLeft(array, start, right);
    }

    if (left < end)
    {
        QuickSortLeft(array, left, end);
    }
}

现在,我尝试对上方的三个位置进行中值优化,以第一个,最后一个和中间位置的中位数为准,并使用中位数作为枢轴,如下所示,但是我遇到了StackOverflow异常

public static void QuickSortMedian(int[] array, int start, int end)
{
    int left = start;
    int right = end;

    int pivot = (array[start] + array[(start + (end - start)) / 2] + array[end]) / 2;

    while (left <= right)
    {
        while (array[left] < pivot)
        {
            left++;
        }

        while (array[right] > pivot)
        {
            right--;
        }

        if (left <= right)
        {
            swap(array, left, right);

            left++;
            right--;
        }
    }

    // Recursive calls
    if (start < right)
    {
        QuickSortMedian(array, start, right);
    }

    if (left < end)
    {
        QuickSortMedian(array, left, end);
    }
}
伯恩哈德·巴克(Bernhard Barker)

您正在计算平均值(但不正确-应该是/3,而不是/2),而不是中位数。

您应该选择三个的中间元素。

类似于:(伪代码)

sort(left, mid, right)
pick mid

在您当前的代码中,它最终可能会得到比其他所有值都大的值,因此您可能最终可能会在右边的0个元素之间进行划分,而只是在相同的数据上反复向左递归。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

算法约简(中位数,快速排序)

来自分类Dev

带“中位数三”的枢轴选择的快速排序:了解过程

来自分类Dev

快速排序中三个分区的中位数如何提高5%左右的效率?

来自分类Dev

如何对三个快速排序的中位数进行最坏情况的排列

来自分类Dev

以3的中位数实施快速排序

来自分类Dev

如何在通用类型的数组中找到三个点的中位数(未排序)?

来自分类Dev

了解两个排序数组中位数的算法

来自分类Dev

快速查找输入中位数的方法

来自分类Dev

MySQL中按中位数的复杂排序

来自分类Dev

使用选择排序查找数组的中位数

来自分类Dev

使用中位数对数组进行排序

来自分类Dev

高效的算法来计算排序数组的绝对绝对和的中位数

来自分类Dev

高效的算法来计算排序数组的pariwise绝对和的中位数

来自分类Dev

尝试使用 3 的中位数实现快速排序,但我不确定我哪里出错了?

来自分类Dev

确定性快速选择第 i 阶统计 python(中位数方法的中位数)

来自分类Dev

中位数算法中常数5来自何处?

来自分类Dev

不了解中位数算法以找到第k个元素

来自分类Dev

Java递归“查找中位数”算法异常错误

来自分类Dev

如何计算未排序数据集的中位数

来自分类Dev

如何按中位数对熊猫的箱线图排序?

来自分类Dev

按行的中位数对2D numpy数组排序

来自分类Dev

R-按收入中位数排序的条形图

来自分类Dev

寻找对确定排序数组中位数的过程的改进

来自分类Dev

中位数以无序方式对列表进行排序

来自分类Dev

按中位数排序格子bwplot中的框的最佳方法

来自分类Dev

使用排序后返回5元组的中位数

来自分类Dev

两个等长排序数组的中位数

来自分类Dev

C ++快速排序算法

来自分类Dev

快速排序算法——澄清

Related 相关文章

  1. 1

    算法约简(中位数,快速排序)

  2. 2

    带“中位数三”的枢轴选择的快速排序:了解过程

  3. 3

    快速排序中三个分区的中位数如何提高5%左右的效率?

  4. 4

    如何对三个快速排序的中位数进行最坏情况的排列

  5. 5

    以3的中位数实施快速排序

  6. 6

    如何在通用类型的数组中找到三个点的中位数(未排序)?

  7. 7

    了解两个排序数组中位数的算法

  8. 8

    快速查找输入中位数的方法

  9. 9

    MySQL中按中位数的复杂排序

  10. 10

    使用选择排序查找数组的中位数

  11. 11

    使用中位数对数组进行排序

  12. 12

    高效的算法来计算排序数组的绝对绝对和的中位数

  13. 13

    高效的算法来计算排序数组的pariwise绝对和的中位数

  14. 14

    尝试使用 3 的中位数实现快速排序,但我不确定我哪里出错了?

  15. 15

    确定性快速选择第 i 阶统计 python(中位数方法的中位数)

  16. 16

    中位数算法中常数5来自何处?

  17. 17

    不了解中位数算法以找到第k个元素

  18. 18

    Java递归“查找中位数”算法异常错误

  19. 19

    如何计算未排序数据集的中位数

  20. 20

    如何按中位数对熊猫的箱线图排序?

  21. 21

    按行的中位数对2D numpy数组排序

  22. 22

    R-按收入中位数排序的条形图

  23. 23

    寻找对确定排序数组中位数的过程的改进

  24. 24

    中位数以无序方式对列表进行排序

  25. 25

    按中位数排序格子bwplot中的框的最佳方法

  26. 26

    使用排序后返回5元组的中位数

  27. 27

    两个等长排序数组的中位数

  28. 28

    C ++快速排序算法

  29. 29

    快速排序算法——澄清

热门标签

归档