python中的資料結構與演算法__JAVA

來源:互聯網
上載者:User

語言:python3.4

一、排序演算法
1.冒泡排序

def bubblesort(l):    print(l)    for i in range(len(l)-1,0,-1):        flag = 1        for j in range(i):            if l[j] > l[j+1]:                l[j],l[j+1] = l[j+1],l[j]                #上面的運算式相當於c中的                #temp=l[j+1]                #l[j+1]=l[j]                #l[j]=temp                flag = 0        if flag:            break    print(l)

總體評價:
1).平均時間複雜度:O(N²)
2).對數組有序性敏感

2.插入排序

def insertsort(l):    print(l)    for i in range(1,len(l)):        temp=l[i]        for j in range(i-1,-1,-1):            if temp >= l[j]:                break            else:                l[j+1] = l[j]                l[j] = temp    print(l)

總體評價:
1).平均時間複雜度O(N²)
2).對數組有序性敏感
3).資料不進行交換,優於冒泡

3.選擇排序

def selectionSort(l):    print(l)    for i in range(len(l)):        for j in range(i+1,len(l)):            if l[i] > l[j]:                l[i],l[j] = l[j],l[i]    print(l)

總體評價:
1).平均時間複雜度O(N²)
2).對數組的有序性不敏感
3).交換次數少,由於冒泡

4.快速排序

import syssys.setrecursionlimit(10000)#手動設定遞迴次數10000次,預設為900次def subSort(l,left,right):    start = left    end = right    flag = l[right]    while left < right:        if l[left] > flag:            l[left],l[right] = l[right],l[left]            right-=1        else:            left+=1            continue        if left < right:            if l[right] <= flag:                l[left],l[right] = l[right],l[left]                left+=1            else:                right-=1    if left-start>1:        subSort(l,start,left-1)    if end-left>1:        subSort(l,left+1,end)

總體評價:
1).平均時間複雜度O(NlogN)
2).對樣本的有序性敏感

5 堆排序

def fixUpToDown(l,t,n): #從上往下堆化,從t開始    while 2*t < n:        i = 2*t #表示t結點的左子節點        if i < n-1 and l[i] < l[i+1]:            i += 1        if l[i] > l[t]:            l[i],l[t] = l[t],l[i]            t = i        else:            breakdef heapSort(l):    n = len(l)-1     for i in range(n//2,0,-1):        fixUpToDown(l,i,len(l))    #此時root結點為最大值,交換最大值與最後一個元素    while n>1:        l[1],l[n] = l[n],l[1]        fixUpToDown(l,1,n)        n-=1    return l[1:]

二、尋找演算法
1.線性尋找

在序列中從一端開始逐個檢查每個元素是否為要尋找的元素,直到找到為止。實現比較簡單,不列出了

2.二分尋找
注意:二分尋找的前提是序列必須有序

def BinarySearch(l,element):    left = 0    right = len(l) - 1    while left <= right:        mid = (left + right) // 2 # //表示整除        if l[mid] < element:            left = mid + 1        elif l[mid] > element:            right = mid - 1        else:            return l[mid]    print("未找到")

三、資料結構
1.棧的實現

class Stack:    def __init__(self,size=10):        self.stack = []        self.top = -1        self.size = size    def isEmpty(self):        if not self.stack:            return True        else:            return False    def isFull(self):        if self.top+1 == self.size:            return True        else:            return False    def top(self):        if self.isEmpty():            print("The Stack is empty")        else:            return self.stack[self.top]    def push(self,element):        if self.isFull():            print("The Stack is Full")        else:            self.stack.append(element)            self.top += 1    def pop(self):        if self.isEmpty():            print("The Stack is empty")        else:            return self.stack.pop()            self.top -= 1    def display(self):        print(self.stack)

2.隊列的實現:

class Queue:    def __init__(self):        self.queue = []        self.front = 0        self.rear = -1        self.size = 0    def isEmpty(self):        if not self.size:            return True        else:            return False    def getSize(self):        return self.size    def push(self,element):        self.queue.append(element)        self.rear += 1        self.size += 1    def pop(self):        if self.isEmpty():            print("The Queue is empty")        else:            self.rear -= 1            self.size -= 1            return self.queue.pop(self.front)    def topData(self):        if self.isEmpty():            print("The Queue is empty")        else:            return self.queue[self.front]    def display(self):        print(self.queue)#python每個函數都有一個預設的傳回值None

3.二叉樹的實現

class TreeNode(object):    def __init__(self,data=None,left=None,right=None):        self.data = data        self.left = left        self.right = rightclass BinaryTree(object):    def __init__(self,data):        self.root = data    def isEmpty(self):        if not self.root:           return True         else:            return False    def preOrder(self,treenode):        if not treenode:            return        print(treenode.data)        self.preOrder(treenode.left)        self.preOrder(treenode.right)    def inOrder(self,treenode):        if not treenode:            return        self.inOrder(treenode.left)        print(treenode.data)        self.inOrder(treenode.right)    def postOrder(self,treenode):        if not treenode:            return        self.postOrder(treenode.left)        self.postOrder(treenode.right)        print(treenode.data)

資料結構和演算法就先列這麼多,後續繼續添加

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.