1. 程式人生 > >python中實現二分查詢,插入排序,歸併排序,快速排序

python中實現二分查詢,插入排序,歸併排序,快速排序

轉載請註明出處http://blog.csdn.net/feimengjuan/article/details/46400303

1、二分查詢

#二分查詢
def BinarySearch(A,begin,end,key):
    index=-10
    mid=(begin+end)/2
    if A[mid]==key:
        index=mid
    if (A[mid]<key) & (begin<end):
        index=BinarySearch(A, mid+1, end, key)
    if (A[mid]>key) & (begin<end):
        index=BinarySearch(A, begin, mid-1, key)
    return index
</pre>2、插入排序<p></p><p></p><pre code_snippet_id="686724" snippet_file_name="blog_20150607_3_1166439" name="code" class="python">#插入排序
def InsertSort(A,begin,end):
    for j in range(1,len(A)):
        key=A[j]
        i=j-1
        while (i>=0) & (A[i]>key):
            A[i+1]=A[i]
            i=i-1
        A[i+1]=key
    return A

3、歸併排序
#歸併排序合併程式
def Merge(A,begin,mid,end):
    n1=mid-begin+1
    n2=end-mid
    L=[]
    R=[]
    for i in range(0,n1):
        L.append(A[begin+i])
    for j in range(0,n2):
        R.append(A[mid+j+1])
    L.append(1000000)  #左哨兵牌位
    R.append(1000000)  #右哨兵牌位
    i=0
    j=0
    for k in range(begin,end+1):#這裡注意range的取值是begin到end+1-1,所以range第二個引數用end+1
        if L[i]<R[j]:
             A[k]=L[i]
             i=i+1
        else:
            A[k]=R[j]
            j=j+1
    return A
    
def Merge_sort(A,begin,end):
    if begin<end:
        mid=(begin+end)/2
        Merge_sort(A,begin,mid)
        Merge_sort(A,mid+1,end)
        Merge(A,begin,mid,end)
    return A

4、快速排序
#快速排序
def Partition(A,begin,end):
    #選取主元素
    x=A[begin]
    i=begin
    for j in range(i+1,end+1):
        if A[j]<=x:
            i=i+1
            #交換A[i]和A[j]
            temp1=A[i]
            A[i]=A[j]
            A[j]=temp1
    #交換A[begin]和A[i]
    temp1=A[begin]
    A[begin]=A[i]
    A[i]=temp1
    return i

def QuickSort(A,begin,end):
    if begin<end:
        r=Partition(A,begin,end)
        QuickSort(A, begin, r-1)
        QuickSort(A, r+1, end)
    return A

5、主程式
A=[7,8,3,5,6,4]
index=BinarySearch(A, 0, 5, 3)
if index==-10:
    print "The element is not existing"
else:
    print "The index is:",index

#C=InsertSort(B,0,len(B)-1)
#C=Merge_sort(A,0,len(A)-1)
C=QuickSort(A, 0, len(A)-1)
print C