python中實現二分查詢,插入排序,歸併排序,快速排序
阿新 • • 發佈:2019-01-01
轉載請註明出處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