快速排序的实现 - Python

4

我正在尝试在Python中实现快速排序算法(https://zh.wikipedia.org/wiki/快速排序)。我已经成功地在C++中实现了该算法,但是在Python中它给出了奇怪的结果。

这里是C++代码:

//Quicksort implementation
//Anchit Virmani - 27/10/2015 02:07 AM
#include <iostream>
using namespace std;

void swap(int* a, int* b)
{
    int t=*a;
    *a=*b;
    *b=t;
}

void quick_sort(int arr[],int l, int r)
{
    if(l<r)
    {
        int p=arr[l];
        int i=l+1;

        for(int j=(l+1);j<=r;j++)
        {
            if(arr[j]<p)
            {
                swap(&arr[j],&arr[i]);
                i++;
            }
        }
        swap(&arr[l],&arr[i-1]);

        quick_sort(arr,l,i-2);
        quick_sort(arr,i,r);

    }
}
int main() {
    int arr[3]={2,1,3};
    quick_sort(arr,0,2);

    for(int i=0;i<3;i++)
    {
        cout<<arr[i]<<" ";
    }
    return 0;
}

这是我用Python编写的代码:

def quick_sort(arr,l,r):
    if(l<r):
        p=arr[l]
        i=l+1
        j=0

        for j in range(l+1,r+1):
            if arr[j]<p:
                arr[j],arr[i]=arr[i],arr[j]
                i=i+1


        arr[l],arr[r]=arr[r],arr[l]

        quick_sort(arr,l,i-2)
        quick_sort(arr,i,r)



arr=[4,3,2,1]
quick_sort(arr,0,3)

print(arr)

Python 实现有什么问题?

天啊,怎么会有人踩这个问题?虽然这个问题有点儿幼稚,也不会对其他人有所帮助,但至少他的问题很明确,并且提供了所有必要的代码以便我们帮助他。 - MK.
1
@MK。这是一个“帮我修复代码中的错误”的垃圾投放。的确,这是一个有点愚蠢的问题,并且不会对任何人有所帮助。令人惊讶的是它得到了赞同票。如果像这样投票,那么很明显这个网站会迅速充满垃圾。 - juanchopanza
1
@juanchopanza 如果我没有提供C++代码,那就不会是一个“帮我修复错误”的问题。实际上,我是新手Python,所以我不确定我在Python中是否做得很好,因此我来到SO寻求帮助。 - user5290294
1
@YangYing,这里有一个链接,讨论了一些快速排序的实现。 - zangw
这实际上对我非常有帮助,因为我想看一下同样的代码在这两种语言中是如何表现的。 - Joffrey Baratheon
显示剩余2条评论
1个回答

1

好的,如果你逐行比较C++和Python版本,你会注意到这一行:

 arr[l],arr[r]=arr[r],arr[l]

在Python中与C++不同。此外,您选择的轴点似乎有些奇怪。


是的,这个轴心点很奇怪,因为我需要选择数组的第一个元素来完成作业问题中的后续子任务。感谢指出错误,我感到很愚蠢没有注意到这个:/ - user5290294

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接