python學習演算法(1)

為不為發表於2019-01-02
# 樹的先序遍歷,先列印出當前值,再一直遍歷樹的左孩子,如果是空則跳過
class Node(object):
    def __init__(self,value,left=None,right=None):
        self.value=value
        self.left=left
        self.right=right

def pre(self):
        if(self!=None):
            print(self.value)
            pre(self.left)
            pre(self.right)
tree=Node(7,Node(6),Node(64))
pre(tree)
#氣泡排序,核心就是先找出第一個再所有中最小的,再移到後面,找出第二個最小的
a=[1,3,4,2,7,6]
def bubble_sort(array):
    for i in range(len(array)-1):
        for j in range(len(array)-i-1):
            if(array[j+1]<array[j]):
                # temp=array[j]
                # array[j]=array[j+1]
                # array[j+1]=temp
                array[j+1],array[j]=array[j],array[j+1]
    return array
print(a)
bubble_sort(a)
print(a)
#選擇排序,選出最小的 放在前面
a=[1,3,4,2,7,6]
for s in range(len(a)):
    print(s)
def selected_sort(array):
    for i in range(len(array)-1):
        index=i
        for j in range(i+1,len(array)):
            if(array[index]>array[j]):
                index=j
        array[i],array[index]=array[index],array[i]
    return array
print(a)
selected_sort(a)
print(a)
#快速排序,以最後一個數字為基準,將後面的數字比基準大的排後面,比基準小的排前面。這樣就分成了兩個陣列,對兩個陣列重複操作,直至剩下一個數字
a=[2,3,1,4,7,5,6]
def QuickSort(array,left,right):
    if(left<right):
        i=Partition(array,left ,right)
        QuickSort(array,left,i)
        QuickSort(array,i+1,right)
# index的作用是記錄比基準數小的個數-1,方便陣列下標,array[index],array[i]=array[i],array[index] 的作用是把基準小的移到前面,這樣便於分成兩個陣列
def Partition(array,left ,right):
    index=left-1
    for i in range(left,right):
        if(array[i]<=array[right]):
            index+=1
            array[index],array[i]=array[i],array[index]
    array[index+1],array[right]=array[right],array[index+1]
    return index
print(a)
QuickSort(a,0,len(a)-1)
print(a)

相關文章