📜  用于堆排序的时间复杂度图的Python代码(1)

📅  最后修改于: 2023-12-03 14:56:20.280000             🧑  作者: Mango

用于堆排序的时间复杂度图的Python代码介绍

堆排序是一种用于排序的高效算法,其时间复杂度为O(n*log2n)。堆排序基于堆数据结构实现,堆可以被看做一个近似的完全二叉树。在堆数据结构中,堆中的最大值总是位于根节点。堆排序过程可以简化为将给定的无序数组构建成一个堆,然后依次取出堆顶元素(即最大值),并将其放置在已排序的数组中。按照该方法,每次取出数组中的最大值,再按照次大值、第三大值的顺序排列。因此,堆排序也被称为选择排序。

以下为用于堆排序的时间复杂度图的Python代码片段:

import matplotlib.pyplot as plt
import timeit

def heapify(arr, n, i):
    largest = i
    l = 2 * i + 1  
    r = 2 * i + 2  
    
    if l < n and arr[i] < arr[l]:
        largest = l
  
    if r < n and arr[largest] < arr[r]:
        largest = r
  
    if largest != i:
        arr[i],arr[largest] = arr[largest],arr[i]
  
        heapify(arr, n, largest)
  
def heapSort(arr):
    n = len(arr)
  
    for i in range(n//2 - 1, -1, -1):
        heapify(arr, n, i)
  
    for i in range(n-1, 0, -1):
        arr[i], arr[0] = arr[0], arr[i]  
        heapify(arr, i, 0)


input_sizes = [100, 1000, 2000, 5000, 10000, 15000, 20000, 25000, 30000]
results = []

for size in input_sizes:
    setup_code = f"from __main__ import heapSort; import random; arr = random.sample(range(1, {size}), {size})"
    test_code = "heapSort(arr)"
    time = timeit.timeit(stmt=test_code, setup=setup_code, number=10)
    results.append(time)

plt.plot(input_sizes, results)
plt.xlabel('Input Size')
plt.ylabel('Execution Time (seconds)')
plt.title('Heap Sort Time Complexity')
plt.show()

上述代码主要包括以下部分:

  • 实现了堆排序
  • 使用timeit模块计算不同输入大小的排序所需时间
  • 使用matplotlib模块绘制时间复杂度图

堆排序是一种高效的排序算法,其时间复杂度为O(n*log2n),在处理大规模数据时具有更快的速度。由于其在实现时需要用到额外的空间,因此可在对内存使用不敏感的情况下优先选择使用。