快速排序实现 - Python

Posted

技术标签:

【中文标题】快速排序实现 - Python【英文标题】:Quick Sort Implementation - Python 【发布时间】:2015-10-26 22:05:13 【问题描述】:

我正在尝试在 Python 中实现快速排序算法 (https://en.wikipedia.org/wiki/Quicksort)。我在 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。这是一个“为我修复错误”的代码转储。 “有点愚蠢的问题,它不会帮助任何人”确实。令人惊讶的是,它被投票赞成。有了这样的投票模式,这个网站很快就会出现垃圾也就不足为奇了。 @juanchopanza 如果我没有提供 C++ 代码,这不会是一个“为我修复错误”的问题。实际上,我是 python 新手,所以我不确定我是否在 Python 中做的一切都很好,所以我来 SO 寻求帮助。 @YangYing,这里有一个link,讲的是一些快速排序的实现。 【参考方案1】:

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

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

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

【讨论】:

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

以上是关于快速排序实现 - Python的主要内容,如果未能解决你的问题,请参考以下文章

快速排序方法——python实现

Python实现希尔排序快速排序归并排序

Python3实现快速排序归并排序堆排序

python实现快速排序归并排序

python实现快速排序归并排序

python实现快速排序归并排序