python中实现二分查找,插入排序,归并排序,快速排序

本文详细介绍了如何在Python中实现二分查找以及三种基本排序算法:插入排序、归并排序和快速排序。通过对这些算法的理解和实践,有助于提升编程能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明出处http://blog.youkuaiyun.com/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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值