Python实现快速排序

2025-10-22 02:09:59

1、打开Python开发工具IDLE,新建‘快排.py’文件,并写代码如下:

def kuaipai(list1):

    n = len(list1)

    low = 0

    high = n-1

    mid = list1[low]

    while low<high:

        while low<high and list1[high]>=mid:

            high-=1

        list1[low]=list1[high]

        while low<high and list1[low]<mid:

            low+=1

        list1[high]=list1[low]

    list1[low]=mid

if __name__ == '__main__':

    list1 = [8,10,6,7,9]

    kuaipai(list1)

    print (list1)

列表第一个值,作为基准,小于这个值,放到左边,大于放到右边,把这个值放到中间

Python实现快速排序

2、F5运行程序,可以看到以这个值为中间,分成左右大小顺序

[7, 6, 8, 10, 9]

Python实现快速排序

3、递归调要这个函数,以实现上一步分成左右分组继续排序,代码如下:

def kuaipai(list1,start,end):

    

    low = start

    high = end

    mid = list1[low]

    while low<high:

        while low<high and list1[high]>=mid:

            high-=1

        list1[low]=list1[high]

        while low<high and list1[low]<mid:

            low+=1

        list1[high]=list1[low]

    list1[low]=mid

    kuaipai(list1,start,low-1)

    kuaipai(list1,low+1,end)

if __name__ == '__main__':

    list1 = [8,7,6,9]

    kuaipai(list1,0,len(list1)-1)

    print (list1)

这样实现了左右两边再递归调用快排

Python实现快速排序

4、F5运行程序,程序报错了,这是因为递归没有结束条件。

RecursionError: maximum recursion depth exceeded in comparison

Python实现快速排序

5、继续改写代码,为递归找一个结束条件,结束条件就是已经排好序,排好序时左右移动的low和high重叠的一定实在一个端点。即一个一次也没有移动,一个移动到头。改写代码如下:

def kuaipai(list1,start,end):

    if start>=end:

        return

    low = start

    high = end

    mid = list1[low]

    while low<high:

        while low<high and list1[high]>=mid:

            high-=1

        list1[low]=list1[high]

        while low<high and list1[low]<mid:

            low+=1

        list1[high]=list1[low]

    list1[low]=mid

    kuaipai(list1,start,low-1)

    kuaipai(list1,low+1,end)

if __name__ == '__main__':

    list1 = [8,7,6,9]

    kuaipai(list1,0,len(list1)-1)

    print (list1)

Python实现快速排序

6、F5运行程序,快速排序成功

[6, 7, 8, 9]

Python实现快速排序

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢