python算法-快速选择

快速选择-递归排序
c=0
def quick_sort(lista, first, last):
global c

# 递归的退出条件
# print(lista)
if first >= last:
    return
# 设定起始元素为要寻找位置的基准元素
mid_value = lista[first]
# low为序列左边的由左向右移动的游标
# high为序列右边的由右向左移动的游标
low = first
hight = last
while low < hight:
     # 当hight位的值大于mid_value的值则一直向左移动
    while low < hight and lista[hight] >= mid_value:
        hight -= 1
        c+=1
    # 停止移动要么low与hight重合,要么到了hight位值小于mid_value
    lista[low] = lista[hight]

    while low < hight and lista[low] < mid_value:
        low += 1
        c+=1
    lista[hight] = lista[low]
    # hight -= 1
# 退出循环后,low与high重合,此时所指位置为基准元素的正确位置
# 将基准元素放到该位置
lista[low] = mid_value
# 在做递归的时候没有用切片,是为了保证在做多次递归的时候操作排序的永远只会是这一个列表
# 先对标志位左边的先进行排序
# print(lista)
quick_sort(lista, first, low-1)
# 再对标志位右边的先进行排序
quick_sort(lista, low+1, last)

return lista

print(quick_sort(lista,0, len(lista)-1))
print(c)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CD-Python-JY-1809班项目阶段教学内容 开篇 - 就业形势分析 就业方向Python后端开发工程师(...
    ychaochaochao阅读 998评论 0 1
  • Python语言进阶 数据结构和算法算法:解决问题的方法和步骤评价算法的好坏:渐近时间复杂度和渐近空间复杂度。渐近...
    赤剑吟龙阅读 565评论 0 0
  • Python语言进阶 数据结构和算法 算法:解决问题的方法和步骤 评价算法的好坏:渐近时间复杂度和渐近空间复杂度。...
    you的日常阅读 588评论 2 8
  • 快速排序: 学习快速排序,要先复习下递归: 递归的2个条件: 1. 函数自己调用自己 2.有一个退出的条件 练习:...
    朝畫夕拾阅读 612评论 0 0
  • 插入排序def inster_sort(lists): count = len(lists) for ...
    _Haimei阅读 339评论 0 1