[Algorithm] Quick Sort

# Quicksort recursive play 
DEF quicksort (ARR):
     # End Condition 
    IF len (ARR) <=. 1 :
         return ARR
     # intermediate value is more stable 
    middle ARR = [len (ARR) 2 // ]
     # remember the middle out, and finally into the middle 
    del ARR [len (ARR) 2 // ]
     # using the formula list, 100W data, 2.9s 
    # left = [X for X in ARR IF X <= middle] 
    # right = [X for X in IF X ARR> Middle] 

    # of 2.6s 
    left = [] 
    right = []
     for X in ARR: 
        left.append (X)IF X <= middle the else right.append (X) 

    # remember to put the middle middle 
    return quicksort (left) + [middle] + quicksort (right) 


# nonrecursive play 
DEF quicksort2 (ARR):
     '' ' 
    analog stack operations to achieve non quicksort recursive 
    '' ' 
    IF len (ARR) <2 :
         return ARR 
    Stack = [] 
    stack.append (len (ARR) -. 1 ) 
    stack.append (0) 
    the while Stack: 
        L = stack.pop () 
        R & lt = stack.pop () 
        index = partition(arr, l, r)
        if l < index - 1:
            stack.append(index - 1)
            stack.append(l)
        if r > index + 1:
            stack.append(r)
            stack.append(index + 1)


def partition(arr, start, end):
    # 分区操作,返回基准线下标
    pivot = arr[start]
    while start < end:
        while start < end and arr[end] >= pivot:
            end -= 1
        arr[start] = arr[end]
        while start < end and arr[start] <= pivot:
            start += 1
        arr[end] = arr[start]
    # 此时start = end
    arr[start] = pivot
    return start


if __name__ == '__main__':
    li = list(range(1000000))
    import random

    random.shuffle(li)
    sorted = quicksort(li)
    print(sorted[:10])

 

Quick Sort.

Guess you like

Origin www.cnblogs.com/leokale-zz/p/12174207.html