简洁版本的快排和归并排序

tech2022-10-03  117

#最简洁的快排序,递归出口–low=high low>=high

def quick_sort(nums, low, high): if low >= high: return left = low right = high pivot = nums[left] while left < right: while left < right and pivot <= nums[right]: right -= 1 nums[left],nums[right] = nums[right],nums[left] while left < right and pivot > nums[left]: left += 1 nums[left], nums[right] = nums[right], nums[left] nums[left] = pivot quick_sort(nums, low, left-1) quick_sort(nums, left+1, high)

#最简洁的归并排序

def merge(left, right): l,r = 0,0 result = [] while l < len(left) and r < len(right): if left[l] < right[r]: result.append(left[l]) l += 1 else: result.append(right[r]) r += 1 result += left[l:] result += right[r:] return result def merge_sort(nums): if len(nums) <= 1: return nums mid = len(nums) // 2 left = merge_sort(nums[:mid]) right = merge_sort(nums[mid:]) return merge(left, right)

思想: 快速排序:不稳定的排序算法,原地操作(不断的更换区间进行递归) 最优时间复杂度:O(nlog(n)) 最坏时间复杂度:O(n^2)

归并排序:稳定的排序算法,分治的思想 先拆:使用递归不断的拆分序列–递归的出口就是序列只有一个元素的情况 后和:从上面递归的最底层开始合并(从内向外到最终排序好的序列返回) 最优时间复杂度:O(nlog(n)) 最坏时间复杂度:O(nlog(n))

最新回复(0)