QuickSort 快速排序

基本思想:divide & conquer and partition - 把array分成>=pivot和<pivot(=随意)两部分

重点:
1.while l<r -> 最终l等于r
2.因为最终start与l交换位置,l必须指向一个小于pivot的数 -> if else的顺序不能变

Partitions

def partitionSwap(arr, start, end):
  pivot = arr[start]
  l, r = start, end
  while l<r:
    if arr[r]>pivot: r -= 1
    elif arr[l]<=pivot: l += 1
    else: arr[l], arr[r] = arr[r], arr[l]
  arr[l], arr[start] = arr[start], arr[l]
  return l
def partitionTianKen(arr, start, end):
  pivot = arr[start]
  l, r = start, end
  while l<r:
    while l<r and arr[r]>pivot: r-=1
    arr[l], arr[r] = arr[r], arr[l]
    while l<r and arr[l]<=pivot: l+=1
    arr[l], arr[r] = arr[r], arr[l]
  return l
def partitionSeq(arr, start, end):
  pivot = arr[end]
  for i in range(start, end, 1):
    if arr[i]<pivot:
      arr[start], arr[i] = arr[i], arr[start]
      start += 1
  arr[end], arr[start] = arr[start], arr[end]
  return start

Basics: divide & conquer

def quickSort(arr, start, end, partition):
  if start>=end: return
  pivotPosition = partition(arr, start, end)
  quickSort(arr, start, pivotPosition-1, partition)
  quickSort(arr, pivotPosition+1, end, partition)

run the above code

QuickSort with 3-way Partition

Reference:
https://segmentfault.com/a/1190000004410119#articleHeader1
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值