JS-Sorting-Algorithm icon indicating copy to clipboard operation
JS-Sorting-Algorithm copied to clipboard

快速排序的实现方式有优化空间

Open bones7456 opened this issue 2 years ago • 0 comments

快速排序的精髓在于“减少swap的次数”,目前的实现代码中,swap次数偏多,不够精简,在GIF动图的演示里也能看出问题。 正确的实现方式可以参考wikipedia,以下是python实现方式的代码:

def quickSort(arr, left=None, right=None):
    left = 0 if not isinstance(left,(int, float)) else left
    right = len(arr)-1 if not isinstance(right,(int, float)) else right
    if left < right:
        partitionIndex = partition(arr, left, right)
        quickSort(arr, left, partitionIndex-1)
        quickSort(arr, partitionIndex+1, right)
    return arr

def partition(arr, left, right):
    pivot = arr[right]
    i, j= left, right - 1
    while True:
        while i<=j and arr[i]<pivot:
            i+=1
        while i<=j and arr[j]>=pivot:
            j-=1
        if i<j:
            swap(arr, i, j)
        else:
            break
    swap(arr, i, right)
    return i

def swap(arr, i, j):
    arr[i], arr[j] = arr[j], arr[i]

bones7456 avatar Dec 22 '23 06:12 bones7456