快排&归并

 1 def partition(nums, left, right):
 2     if left >= right:
 3         return 
 4     mid = left + (right - left)//2
 5     pivot = nums[mid]
 6     nums[mid], nums[left] = nums[left], nums[mid]
 7     j = left
 8     for i in range(left+1, right+1):
 9         if nums[i] < pivot:
10             j += 1 #比pivot小的都放在left+1到j,最后left和j交换位置,就能得到left到j-1都比pivot小
11             nums[j], nums[i] = nums[i], nums[j]
12     nums[left], nums[j] = nums[j], nums[left]
13     partition(nums, left, j - 1)
14     partition(nums, j + 1, right)
15     return nums
 1 def MergeSort(lists):
 2     if len(lists) <= 1:
 3         return lists
 4     num = len(lists) // 2
 5     left = MergeSort(lists[:num])                   
 6     right = MergeSort(lists[num:])
 7     return Merge(left, right)
 8 
 9 def Merge(left, right):
10     l, r = 0, 0
11     result = []
12     while l < len(left) and r < len(right):
13         if left[l] <= right[r]:
14             result.append(left[l])
15             l += 1
16         else:
17             result.append(right[r])
18             r += 1
19     result += list(left[l:])
20     result += list(right[r:])
21     return result

猜你喜欢

转载自www.cnblogs.com/qiyu-vision/p/12823734.html
今日推荐