天天看點

python快速排序

#_*_coding:utf-8_*_
__author__ = 'Alex Li'


def quick_sort(array,left,right):
    '''

    :param array:
    :param left: 清單的第一個索引
    :param right: 清單最後一個元素的索引
    :return:
    '''
    if left >=right:
        return
    low = left
    high = right
    key = array[low] #第一個值

    while low < high:#隻要左右未遇見
        while low < high and array[high] > key: #找到清單右邊比key大的值 為止
            high -= 1
        #此時直接 把key(array[low]) 跟 比它大的array[high]進行交換
        array[low] = array[high]
        array[high] = key


        while low < high and array[low] <= key : #找到key左邊比key大的值,這裡為何是<=而不是<呢?你要思考。。。
            low += 1
            #array[low] =
        #找到了左邊比k大的值 ,把array[high](此時應該剛存成了key) 跟這個比key大的array[low]進行調換
        array[high] = array[low]
        array[low] = key

    quick_sort(array,left,low-1) #最後用同樣的方式對分出來的左邊的小組進行同上的做法
    quick_sort(array,low+1, right)#用同樣的方式對分出來的右邊的小組進行同上的做法



if __name__ == '__main__':

    array = [96,14,10,9,6,99,16,5,1,3,2,4,1,13,26,18,2,45,34,23,1,7,3,22,19,2]
    #array = [8,4,1, 14, 6, 2, 3, 9,5, 13, 7,1, 8,10, 12]
    print("before sort:", array)
    quick_sort(array,0,len(array)-1)

    print("-------final -------")
    print(array)