• 005---快速排序


    # 快速排序
    # 时间复杂度:O(NlogN) 当n等于16层时,他一共要执行四次func() 每一个func就是O(n) 所以就是 N * logN
    # 最差的时间复杂度也就是O(n^2) 当然这种情况出现的几率不大

    # 找一个基准数,暂且为左边第一个,用变量存起来,此时基准数的位置是空的
    # 然后从右边开始找比基准数小的数。找到之后把最小数放到基准数的位置
    # 此时最小数之前的位置又是空的,就反过来,从左边开始找,找比基准数大的数 放到空位置上面。
    # 几次之后 保证左边的数都比基准数小,右边的数都比基准数大
    # 最后递归调用完成排序
     1 def func(li, left, right):
     2     tmp = li[left]
     3     while left < right:
     4         while left < right and li[right] >= tmp:  # 右边找比tmp小的数
     5             right -= 1                            # 比tmp大,right向左移动一位
     6         li[left] = li[right]                      # 找到之后 右边的值写到左边空位上
     7         while left < right and li[left] <= tmp:   # 左边找比tmp大的数
     8             left += 1                             # 比tmp小,right向右移动一位
     9         li[right] = li[left]                      # 找到之后 左边的值写到右边空位上
    10     li[left] = tmp                                # 两个while一旦left与right碰头,也就是找到时候没有找到比自己大的数或者比自己小的数,跳出了循环,并且将tmp的值赋给left或right所在的索引
    11     return left
    12 
    13 
    14 li = [5, 7, 4, 6, 3, 1, 2, 9, 8]
    15 
    16 
    17 def quick_sort(li, left, right):

     18    if left < right:
     19       mid = func(li, left, right)
     20       quick_sort(li, left, mid - 1)
     21       quick_sort(li, mid + 1, right)

    22 
    23 
    24 quick_sort(li, 0, len(li) - 1)
    25 print(li)
  • 相关阅读:
    java--键盘事件类,按下回车则模拟鼠标
    java记录之数据库操作编写程序实现用户登录、注册、修改密码
    Java记录之简易记事本
    java记录之Date的使用
    java常用实用类的使用
    java组件练习之复数计算器和下拉框联动
    Java记录参数传递和split
    Java记录--简单的继承
    JVM调优
    linux学习1-------------环境部署搭建
  • 原文地址:https://www.cnblogs.com/xjmlove/p/10176972.html
Copyright © 2020-2023  润新知