首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速排序不排序

快速排序不排序
EN

Stack Overflow用户
提问于 2010-02-23 16:02:29
回答 2查看 1.2K关注 0票数 2

因此,我尝试创建一个快速排序方法,但是,它不能正确排序。下面是我的输入和输出

原始数组:

80.0 10.0 50.0 70.0 60.0 90.0 20.0 30.0 40.0

排序数组:

0.0 30.0 20.0 80.0 40.0 60.0 70.0 10.0 90.0 50.0

我尝试将for循环更改为for(int i = left; i < right; i++)

但现在的输出是:

0.0 20.0 30.0 40.0 80.0 10.0 60.0 90.0 70.0 50.0

代码语言:javascript
复制
    public static void sort(double[] a)
    {
        quickSort(a, 0, a.length-1);
    }

    public static void quickSort(double [] a, int left, int right)
    {
        if (left < right)
        {
            int pivotIndex = (left+right)/2;
            int pos = partition(a,left,right,pivotIndex);
            quickSort(a,left,pos-1);
            quickSort(a,pos+1,right);
        }
    }

    private static int partition(double [] a, int left,int right,int pivotIndex)
    {
        double temp = a[pivotIndex];
        a[pivotIndex] = a[right];
        a[right] = temp;
        int pos = left;//represents boundary between small and large elements
        for(int i = left; i < right-1; i++)
        {
            if (a[i] <= a[pivotIndex])
            {
                double temp2 = a[i];
                a[i] = a[pos];
                a[pos] = temp2;
                pos++;
            }
        }
        double temp3 = a[pivotIndex];
        a[pivotIndex] = a[pos];
        a[pos] = temp3;
        return pos;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-23 16:25:37

这就是你想要做的:

代码语言:javascript
复制
private static void swap(double[] a, int i, int j) {
    double t = a[i];
    a[i] = a[j];
    a[j] = t;
}

private static int partition(double [] a, int left,int right,int pivotIndex)
{
    swap(a, pivotIndex, right);
    int pos = left;//represents boundary between small and large elements
    for(int i = left; i < right; i++)
    {
        if (a[i] < a[right])
        {
            swap(a, i, pos);
            pos++;
        }
    }
    swap(a, right, pos);
    return pos;
}

我通过一个帮助器swap方法使代码更清晰。你在原始代码中有3个bug:

在循环中使用错误的索引来获取循环中的透视元素boundary

  • You're
  • 在循环

之后在错误的索引上交换了元素

票数 8
EN

Stack Overflow用户

发布于 2010-02-23 16:15:27

变化

代码语言:javascript
复制
for(int i = left; i < right-1; i++)

代码语言:javascript
复制
for(int i = left; i < right; i++)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2316555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档