zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    git 错误 fatal: Not a valid object name: 'master'.
    SQL: select一组数据,concat同表同列的数据
    Linux curl usage
    Regular Expression
    浅谈Linux Process status,环境锁
    浅谈Manpage
    Java文件读写详解。 附txt乱码问题, html乱码问题
    在ubuntu 18.04下装有线守护wg
    centOS 7 换ssh端口
    如何把DEBIAN变成UBUNTU-DESKTOP最少化安装
  • 原文地址:https://www.cnblogs.com/xjmlove/p/10176972.html
Copyright © 2011-2022 走看看