defquick_sort(arr):"""快速排序算法时间复杂度: 平均 O(n log n),最坏 O(n²)空间复杂度: O(log n)稳定性: 不稳定"""iflen(arr)<=1:return arrpivot = arr[len(arr)//2]left =[x for x in arr if x < pivot]middle =[x for x in arr if x == pivot]right =[x for x in arr if x > pivot]return quick_sort(left)+ middle + quick_sort(right)# 原地快速排序版本defquick_sort_inplace(arr, low=0, high=None):"""原地快速排序"""if high isNone:high =len(arr)-1arr = arr.copy()if low < high:pi = partition(arr, low, high)quick_sort_inplace(arr, low, pi -1)quick_sort_inplace(arr, pi +1, high)return arrdefpartition(arr, low, high):"""分区函数"""pivot = arr[high]i = low -1for j inrange(low, high):if arr[j]< pivot:i +=1arr[i], arr[j]= arr[j], arr[i]arr[i +1], arr[high]= arr[high], arr[i +1]return i +1# 示例使用
arr4 =[64,34,25,12,22,11,90]print('原数组:', arr4)print('快速排序结果:', quick_sort(arr4))
defheap_sort(arr):"""堆排序算法时间复杂度: O(n log n)空间复杂度: O(1)稳定性: 不稳定"""result = arr.copy()n =len(result)# 构建最大堆for i inrange(n //2-1,-1,-1):heapify(result, n, i)# 逐个提取元素for i inrange(n -1,0,-1):result[0], result[i]= result[i], result[0]# 将当前最大元素移到末尾heapify(result, i,0)# 重新调整堆return resultdefheapify(arr, n, i):"""调整堆结构"""largest = ileft =2* i +1right =2* i +2if left < n and arr[left]> arr[largest]:largest = leftif right < n and arr[right]> arr[largest]:largest = rightif largest != i:arr[i], arr[largest]= arr[largest], arr[i]heapify(arr, n, largest)# 示例使用
arr6 =[64,34,25,12,22,11,90]print('原数组:', arr6)print('堆排序结果:', heap_sort(arr6))