快速排序

递归:

1、函数自己调用自己

2、要有结束递归的条件

def print_num(n):
    if n < 0:
        return
    print(n)
    print_num(n-1)
    print("******")


print_num(3)

执行结果:
3
2
1
0
****
****
****
****

解释:
"""
n=3:
if n <=0: 不会触发
        return
print(n)---》打印了3
print_num(n-1)--》print_num(3-1)-print_num(2)--None
print("*******")#被暂停了,需要等待print_num(2)执行结束
才会执行。
结束递归调用后,打印了一行星号
return None,函数执行完毕了

print_num(2)
n=2:
if n <=0: 不会触发
        return
print(n)---》打印了2
print_num(n-1)--》print_num(2-1)-print_num(1)--None
print("*******")#被暂停了,需要等待print_num(1)执行结束
才会执行。
结束递归调用后,打印了一行星号


print_num(1)
n=1:
if n <=0: 不会触发
        return
print(n)---》打印了1
print_num(n-1)--》print_num(1-1)-print_num(0)--None
print("*******")#被暂停了,需要等待print_num(0)执行结束
才会执行
结束递归调用后,打印了一行星号

print_num(0):
n=0
if n <=0: 被触发
        return
print_num(n-1)--》被短路了,不会执行了
print("*******")---》被短路了,不会执行了
"""

  

def quickSort(nums):
    #结束递归的条件:list为空或只有一个元素
    if len(nums) <= 1:
        return nums
    pivot = nums[0]  #设置基准值,作为比较
    less = [i for i in nums[1:] if i <= pivot]  #比基准值小的元素放在左边
    greater = [i for i in nums[1:] if i >= pivot]  #比基准值大的元素放在右边
    print("less:",less)
    print("greater:",greater)
    return quickSort(less) + [pivot] + quickSort(greater)  #左边的元素,右边的元素组成的list用递归


if __name__ == "__main__":
    quickSort([88,99,3,6,77,0,-100])

 

上一篇:c – Quicksort给出了常数而不是随机数的*


下一篇:快速排序法