9个Python实例带你真正学会Python基本的数据结构与算法

关注头条号,私信回复资料会有意外惊喜呦………………最后一张照片有资料呦。

9个Python实例带你真正学会Python基本的数据结构与算法

冒泡排序:

def bubble_sort(alist):

n = len(alist)

count = 0

for i in range(n-1):

for j in range(n-1-i): # 为排好序的元素个数

if alist[j] > alist[j + 1]:

alist[j], alist[j+1] = alist[j+1], alist[j]

count += 1

if count == 0:

break

print(count)

if __name__ == '__main__':

alist = [3,4,6,8,9]

bubble_sort(alist)

print(alist)

9个Python实例带你真正学会Python基本的数据结构与算法

选择排序:

'''

选择排序:时间复杂度 O(n^2)

列表: list = [2,4,7,7,5,1]

查找指定元素的下标

index = list.index(4)

删除指定元素

list.remove(4)

删除指定下标

del list[0]

'''

def selection_sort(alist):

n = len(alist)

# n-1 是因为最后一个数不用排序

for i in range(n-1):

min_index = i

for j in range(i+1, n):

if alist[j] < alist[min_index]:

min_index = j

if min_index != i:

alist[i], alist[min_index] = alist[min_index], alist[i]

if __name__ == '__main__':

list = [2, 4, 7, 7, 5, 1, 8, 3]

selection_sort(list)

print(list)

9个Python实例带你真正学会Python基本的数据结构与算法

快速排序:

'''

快速排序

最优时间复杂度:O(nlogn)

最坏时间复杂度:O(n2)

'''

def quick_sort(arr):

if len(arr) <= 1:

return arr

mark = arr[0]

less = [i for i in arr[1:] if i <= mark]

greater = [i for i in arr[1:] if i > mark]

res = quick_sort(less) + [mark] + quick_sort(greater)

return res

# 拆分式

def quick_sort2(arr):

if len(arr) <= 1:

return arr

mark = arr[0]

less = []

greater = []

for i in arr:

if i <= mark:

less.append(i)

if i > mark:

greater.append(i)

res = quick_sort(less) + quick_sort(greater)

return res

if __name__ == '__main__':

alist = [5, 6, 2, 7, 3]

result = quick_sort2(alist)

print(result)

插入排序:

'''

插入排序:

最优时间复杂度:O(n)

最坏时间复杂度:O(n2)

'''

def insert_sort(alist):

n = len(alist)

for i in range(1, n):

# 用该元素和前面的元素比较, 如果比前一个小,交换位置

for j in range(i, 0, -1):

if alist[j] < alist[j-1]:

alist[j], alist[j-1] = alist[j-1], alist[j]

if __name__ == '__main__':

list = [2, 4, 7, 7, 5, 1, 8, 3]

insert_sort(list)

print(list)

9个Python实例带你真正学会Python基本的数据结构与算法

归并排序:

#coding:utf-8

def merge_sort(alist):

# 列表拆分

n = len(alist)

mid = n // 2

if n == 1:

return alist

sorted_list = []

left_list = merge_sort(alist[:mid])

right_list = merge_sort(alist[mid:])

left, right = 0, 0

left_n = len(left_list)

right_n = len(right_list)

# 当索引分别小于左右两个列表长度的时候说明游标没有遍历完任何一个列表,此时不断重复对比

while left < left_n and right < right_n:

# 对比两个列表中的数值,小的放到返回列表中

if left_list[left] < right_list[right]:

sorted_list.append(left_list[left])

left += 1

else:

sorted_list.append(right_list[right])

right += 1

# 循环结束之后,有一个列表尚未遍历完毕,此时采用列表相加的方式将剩余数据添加到返回列表的尾部,剩余数据是有序的,将大于返回列表之前的所有数据

sorted_list += left_list[left:]

sorted_list += right_list[right:]

return sorted_list

if __name__ == '__main__':

alist = [12,34,56,78,90,98,76,54,32,21]

result = merge_sort(alist)

print(alist)

print(result)

二分查找:

'''

二分查找 仅当数列有序时才管用, 使用的最多步骤为log2n(2为底数)

时间复杂度 O(logn)

'''

def binary_search(list, item):

low = 0

high = len(list) - 1

while low <= high:

mid = (low + high)//2

guess = list[mid]

if guess == item:

return mid

if guess > item:

high = mid - 1

else:

low = mid + 1

return None

if __name__ == '__main__':

mylist = [1, 3, 5, 7, 9, 11]

index = binary_search(mylist, 13)

print(index)

二叉树:

性质1:在二叉树的第i层上至多有2^(i-1)个结点(i>0)

性质2:深度为k的二叉树至多有2^k - 1个结点(k>0)

性质3:对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;

性质4:具有n个结点的完全二叉树的深度必为 log2(n+1)

性质5:对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i,其右孩子编号必为2i+1;其双亲的编号必为i/2(i=1 时为根,除外)

完全二叉树: 最多只有2个子节点

满二叉树: 特殊的完全二叉树,除最外层,每个节点都有2个节点

二叉树的遍历

广度遍历 -- 层级遍历

深度遍历:都是根据根节点决定

先序遍历:

中序遍历:

后序遍历:

# 创建二叉树

class Binary_tree(object):

def __init__(self):

self.root = None

def add(self, item):

new_Node = Node(item)

# 判断是否为空树

if not self.root:

self.root = new_Node

else:

# 创建节点保持队列

queue = []

queue.append(self.root)

# 遍历所有节点

while len(queue) > 0:

# 获取一个节点,判断其左右节点是否存在,如有缺失补充

node = queue.pop(0)

if node.lchild:

queue.append(node.lchild)

else:

node.lchild = new_Node

return

if node.rchild:

queue.append(node.rchild)

else:

node.rchild = new_Node

return

9个Python实例带你真正学会Python基本的数据结构与算法

二叉树的遍历

# 广度优先遍历

def breadth_travel(self):

if not self.root:

return

else:

queue = []

queue.append(self.root)

while len(queue) > 0:

node = queue.pop(0)

print(node.item, end=' ')

if node.lchild:

queue.append(node.lchild)

if node.rchild:

queue.append(node.rchild)

# 深度优先遍历

# 先序遍历

def pre_travel(self, root):

if root:

print(root.item, end=" ")

self.pre_travel(root.lchild)

self.pre_travel(root.rchild)

# 中序遍历

def in_travel(self, root):

if root:

self.in_travel(root.lchild)

print(root.item, end=" ")

self.in_travel(root.rchild)

# 后序遍历

def after_travel(self, root):

if root:

self.after_travel(root.lchild)

self.after_travel(root.rchild)

print(root.item, end=" ")

二叉树测试:

if __name__ == '__main__':

bTree = Binary_tree()

bTree.add(0)

bTree.add(1)

bTree.add(2)

bTree.add(3)

bTree.add(4)

bTree.add(5)

bTree.add(6)

bTree.add(7)

bTree.add(8)

bTree.add(9)

bTree.breadth_travel()

print()

bTree.pre_travel(bTree.root)

print()

bTree.in_travel(bTree.root)

print()

bTree.after_travel(bTree.root)

很多人在问,学习Python读什么书,这其实是一个非常通用的问题,学习分为三种方式:看书、上课,而读书学习是最实惠也是最高效的一种,小编整理了一些Python高分书籍给大家,从0基础到高级适合不同学习阶段,希望大家学习愉快。获取方式:点击小编头像,关注后私信回复“资料”即可下载。

9个Python实例带你真正学会Python基本的数据结构与算法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构和算法是计算机科学中非常重要的两个概念,Python作为一门高级编程语言,也提供了许多内置的数据结构和算法库。 关于数据结构,Python内置了许多常用的数据结构,例如列表(list)、元组(tuple)、字典(dict)和集合(set)等。此外,Python还提供了一些高级数据结构,例如堆(heapq)、双端队列(collections.deque)和有序字典(collections.OrderedDict)等。这些数据结构可以帮助我们更方便地处理数据,提高程序的效率。 关于算法Python也提供了许多内置的算法库,例如排序算法(sorted)、查找算法(binary search)和随机数生成算法(random)等。此外,Python还提供了一些高级算法库,例如科学计算库NumPy和机器学习库scikit-learn等。这些算法库可以帮助我们更方便地实现各种算法,提高程序的效率和准确性。 下面是一个例子,演示如何使用Python内置的数据结构和算法库: ```python # 使用列表存储数据 data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] # 使用sorted函数进行排序 sorted_data = sorted(data) print(sorted_data) # 输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] # 使用collections.Counter进行计数 from collections import Counter count_data = Counter(data) print(count_data) # 输出:Counter({5: 3, 3: 2, 1: 2, 2: 1, 4: 1, 9: 1, 6: 1}) # 使用heapq模块进行堆排序 import heapq heapq.heapify(data) sorted_data = [] while data: sorted_data.append(heapq.heappop(data)) print(sorted_data) # 输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值