python快速排序远离-python 实现快速排序(面试经常问到)

# -*- coding: UTF-8 -*-

# 递归实现, 把过程打印出来便于理解

def quick_sort1(lis, start, end):

if start >= end:

return

lf = start

rg = end

base = lis[lf]

while lf < rg:

while lf < rg and lis[rg] <= base:

rg -= 1

lis[lf] = lis[rg]

print("while1", lis)

while lf < rg and lis[lf] > base:

lf += 1

lis[rg] = lis[lf]

print("while2", lis)

lis[lf] = base

print(lis)

quick_sort1(lis, rg+1, end)

quick_sort1(lis, start, lf - 1)

def quick_sort2(array, l, r):

if l < r:

q = partition(array, l, r)

quick_sort2(array, l, q - 1)

quick_sort2(array, q + 1, r)

def partition(array, l, r):

x = array[r]

i = l - 1

for j in range(l, r):

if array[j] <= x:

i += 1

array[i], array[j] = array[j], array[i]

array[i + 1], array[r] = array[r], array[i + 1]

return i + 1

# 迭代替代递归,使用栈实现

def quick_sort3(array, l, r):

if l >= r:

return

stack = []

stack.append(l)

stack.append(r)

while stack:

low = stack.pop(0)

high = stack.pop(0)

if high - low <= 0:

continue

x = array[high]

i = low - 1

for j in range(low, high):

if array[j] <= x:

i += 1

array[i], array[j] = array[j], array[i]

array[i + 1], array[high] = array[high], array[i + 1]

stack.extend([low, i, i + 2, high])

if __name__ == "__main__":

# lis1 = [6, 4, 3, 5, 2, 1, 7, 8, 9]

lis = [6, 3, 5, 2, 1, 7, 8, 9, 4]

print("start....")

quick_sort3(lis, 0, len(lis)-1)

print(lis)

print("end...")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值