时间复杂度

需求:某段程序执行的时间
传统做法:
    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)

归并排序

# 时间复杂度O(n log n) 空间复杂度:O(n)
def merge(li, low, middle, high):
    i = low
    j = middle + 1
    tmp = []
    while i <= middle and j <= high:
        if li[i] < li[j]:
            tmp.append(li[i])
            i = i + 1
        else:
            tmp.append(li[j])
            j = j + 1
    while i <= middle:
        tmp.append(li[i])
        i = i + 1
    while j <= high:
        tmp.append(li[j])
        j = j + 1
    li[low:high + 1] = tmp


def merge_sort(li, low, high):
    if low < high:
        middle = (low + high) // 2
        merge_sort(li, low, middle)
        merge_sort(li, middle + 1, high)
        print("归并前:", li[low:high + 1])
        merge(li, low, middle, high)
        print("归并后:", li[low:high + 1])

计数排序

def count_sort(li: list):
    count = [0 for i in range(11)]
    for i in li:
        count[i] += 1
    li.clear()
    for n, num in enumerate(count):
        print(n, num)
        for i in range(num):
            li.append(n)
 posted on 2019-07-01 18:39  HeiTangMuSi  阅读(126)  评论(0编辑  收藏  举报