python 快速排序

Posted on 2020-10-23 20:36  黑炽  阅读(151)  评论(0编辑  收藏  举报
 1 def quickSort(arr, left=None, right=None):
 2     left = 0 if not isinstance(left, (int, float)) else left#如果left不属于int和float范围,那么left=0,属于就还是原来的值
 3     right = len(arr)-1 if not isinstance(right, (int, float)) else right
 4     if left < right:
 5         partitionIndex = partition(arr, left, right)#找到第一次 分成左边右边元素的 界限
 6         quickSort(arr, left, partitionIndex-1)#然后排 左边的元素,按照同样的方法
 7         quickSort(arr, partitionIndex+1, right)
 8     return arr
 9 
10 def partition(arr, left, right):
11     pivot = left#pivot是 基准,用来把大于 和小于基准的数隔开, 通常选择最左边的元素
12     index = pivot+1
13     i = index
14     while i <= right:
15         if arr[i] < arr[pivot]:#如果碰到比基准小的,那么需要换位置
16             swap(arr, i, index)#把下标为i的元素 和下标为index的元素对调
17             index+=1#index为需要确定的位置
18         i+=1
19     swap(arr, pivot, index-1)#最后再把基准和 找到的最后一个小于基准的数换个位置,那么基准所在位置就是 小的大的 分隔线
20     return index-1
21 
22 def swap(arr, i, j):
23     arr[i], arr[j] = arr[j], arr[i]