ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法

2019-07-01 18:53:55  阅读:131  来源: 互联网

标签:tmp right 复杂度 li 算法 time left


时间复杂度

需求:某段程序执行的时间
传统做法:
    import time
    start = time.time()
    程序
    end = time.time()
    end - start
上述做法的前提是:
    程序所依赖的硬件环境是要一致的
    因此,我们不能够单纯的使用time这个模块计算程序的执行时间
时间复杂度:
    用来估算程序执行次数的一个标准,使用O()
如何一眼判断时间复杂度
    循环减半的过程O(logn)
    几次循环就是n的几次方的复杂度

冒泡排序

# 时间复杂度:O(n^2) 空间复杂度:O(1)
def bubble_sort(li):
    for i in range(len(li) - 1):
        flag = False
        for j in range(len(li) - 1 - i):
            if li[j] > li[j + 1]:
                li[j], li[j + 1] = li[j + 1], li[j]
                flag = True
        if not flag:
            return

选择排序

# 时间复杂度:O(n^2) 空间复杂度:O(1)
def select_sort(li):
    for i in range(len(li) - 1):
        min_num = i
        for j in range(i + 1, len(li)):
            if li[min_num] > li[j]:
                li[min_num], li[j] = li[j], li[min_num]

插入排序

# 时间复杂度:O(n^2)空间复杂度:O(1)
def insert_sort(li):
    for i in range(1, len(li)):
        tmp = li[i]
        j = i - 1
        while j >= 0 and li[j] > tmp:
            li[j + 1] = li[j]
            j = j - 1
        li[j + 1] = tmp

快速排序

# 时间复杂度:O(n log n)
def partition(li, left, right):
    tmp = li[left]
    while left < right:
        while left < right and li[right] >= tmp:
            right = right - 1
        li[left] = li[right]
        while left < right and li[left] <= tmp:
            left = left + 1
        li[right] = li[left]

    li[left] = tmp
    return left


def quick_sort(li, left, right):
    if left < right:
        middle = partition(li, left, right)  # O(n)
        quick_sort(li, left, middle - 1)  # O(log n)
        quick_sort(li, middle + 1, right)  # O(log n)

标签:tmp,right,复杂度,li,算法,time,left
来源: https://www.cnblogs.com/ShenJunHui6/p/11115958.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有