堆排序的递归与非递归实现

avatar
作者
猴君
阅读量:0

堆排序(Heap Sort)是一种利用堆的数据结构进行排序的算法。它可以分为递归和非递归两种实现方式。

下面分别给出堆排序的递归和非递归实现代码:

递归实现

def heapify(arr, n, i):     largest = i     left = 2*i + 1     right = 2*i + 2      if left < n and arr[i] < arr[left]:         largest = left              if right < n and arr[largest] < arr[right]:         largest = right      if largest != i:         arr[i], arr[largest] = arr[largest], arr[i]         heapify(arr, n, largest)          def heap_sort(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)              return arr  arr = [12, 11, 13, 5, 6, 7] print("Sorted array is:", heap_sort(arr)) 

非递归实现

def heapify(arr, n, i):     largest = i     left = 2*i + 1     right = 2*i + 2      while True:         if left < n and arr[i] < arr[left]:             largest = left         if right < n and arr[largest] < arr[right]:             largest = right         if largest == i:             break         arr[i], arr[largest] = arr[largest], arr[i]         i = largest         left = 2*i + 1         right = 2*i + 2  def heap_sort(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)              return arr  arr = [12, 11, 13, 5, 6, 7] print("Sorted array is:", heap_sort(arr)) 

以上代码分别给出了堆排序的递归和非递归实现方式。堆排序的时间复杂度为O(nlogn),空间复杂度为O(1)。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!