python 快速排序

#!/usr/bin/env python
# encoding:utf8
import sys,copy
reload(sys)
sys.setrecursionlimit(10000)


def qucikSort(Array, left=0, right=None):
"""爲什麼這中寫法無法保證left <= i-1
或者 i+1 <= right
"""
if  not isinstance(Array,list):
return -1
key = Array[left]
i = left
j = len(Array)-1
while i < j:
while Array[j] >= key and i < j:
j-=1
while Array[i] <= key and i < j:
i+=1
Array[i],Array[j] = Array[j],Array[i]


Array[left],Array[i] = Array[i],Array[left]
if left <= i-1:
qucikSort(Array, left, i-1)
if i+1 <= right:
qucikSort(Array, i+1, right)
return Array




def quick_sort(lists, left, right):
    if left >= right:
        return lists
    key = lists[left]
    low = left
    high = right
    while left < right:
        while left < right and lists[right] >= key:
            right -= 1
        lists[left] = lists[right]
        while left < right and lists[left] <= key:
            left += 1
        lists[right] = lists[left]
    lists[right] = key
    quick_sort(lists, low, left - 1)
    quick_sort(lists, left + 1, high)
    return lists

if __name__ == '__main__':


#a = [66,2,3,4,5,43,543,55,657,68,76,987,9,543,53,4,5,43,54,6,867,43,432,8,677,545,3,5423]
#b = [9, 2, 3, 4, 5, 43, 4]
a=[6,3,5,4,7,1,2,9,8]
b = copy.deepcopy(a)



print qucikSort(a,0,len(a)-1)
print quick_sort(b,0,len(b)-1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章