关于快排 quicksort 的两种写法

2019-07-16 12:14:28 +08:00
 Alpacino

写法 1 i = low 返回 low

def partition(arr,low,high): 
    i = low      # index of smaller element 
    pivot = arr[high]     # pivot
    for j in range(low , high): 
        if   arr[j] <= pivot:
            arr[i],arr[j] = arr[j],arr[i] 
            i = i+1
    arr[i],arr[high] = arr[high],arr[i] 
    return i

def quickSort(arr,low,high): 
    if low < high: 
        pi = partition(arr,low,high) 
        quickSort(arr, low, pi-1) 
        quickSort(arr, pi+1, high) 

写法 2 i = (low-1)开始 返回 i + 1

def partition(arr,low,high): 
    i = ( low-1 )         # index of smaller element 
    pivot = arr[high]     # pivot 
  
    for j in range(low , high): 
        if   arr[j] <= pivot: 
            i = i+1 
            arr[i],arr[j] = arr[j],arr[i] 
  
    arr[i+1],arr[high] = arr[high],arr[i+1] 
    return ( i+1 ) 
  
def quickSort(arr,low,high): 
    if low < high: 
        pi = partition(arr,low,high) 
        quickSort(arr, low, pi-1) 
        quickSort(arr, pi+1, high) 
2649 次点击
所在节点    算法
2 条回复
Alpacino
2019-07-16 12:32:29 +08:00
这两个写法有什么区别吗?
是处理 edge case 上的不同?
billc
2019-07-16 15:14:24 +08:00
茴香豆的茴有 4 种写法。

--------------------------------------------

正经回答:
没差别,你把下面所有的 i,替换成 i-1,和上面的完全一样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/583386

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX