算法入门(三,,快速排序与二叉树)

不及小步无以至千里,不及小流无以成江河,下面开始上干货。

快速排序:(特点快)
思路:1,取第一个x元素,使其排列到对应的位置,2,数列被元素分成二块,左边比x小,右边比x大 3,递归完成排列

	def partition(ls,left,right):
    tmp=ls[left]#取左边元素
    while left <right: #设置终止条件
        while left<right and ls[right] >= tmp :#从右找比tmp小的数
            right-=1 #向左走一步

        ls[left]=ls[right]#把右边放到左边
        print(ls)#左边归位
        while left<right and ls[left] <=tmp:
            left+=1
        ls[right]=ls[left]#把左边放到右边
        print(ls)#右边归位
    ls[left]=tmp    #把tmp归位
    return left
def quick(ls,left,right):
    if left <right :
        mid=partition(ls,left,right)
        quick(ls,left,mid-1)
        quick(ls,mid+1,right)
ls=[3,2,4,7,8,9,6,7]
quick(ls,0,len(ls)-1)
print(ls)

现象:
在这里插入图片描述
快速排序效率:O(nlogn)

树结构:(树是一种可以递归定义的数据结构)
树是n个节点组成的集合:1,n=0为空树 2,n>0,那么存在1节点作为根节点,其节点可以分为m个集合,每个集合也是一棵树。
根节点:第一个分叉节点
叶子节点:不能分叉节点
树的深度(高度):看树有几层
树的度:树的度就是树分叉的数量(向下的分叉)
孩子节点/父节点:树结构下,上面的树为父,下面为子

二叉树:树的度不超过二的树(每个节点最多有二个孩子节点,二个孩子区分为左孩子节点与右孩子节点)
满二叉树:每个二叉树到达最大值
完全二叉树:叶子节点只能出现在最下层和次下层,并且最下层的节点都集中在该层最左边的若干位置的二叉树(满二叉树右边开始拿走几个,左边满的)

二叉树的存储方式:(表示方式:链式存储方式与顺序存储方式)
顺序存储方式:(列表来存储)
在这里插入图片描述
父节点和左边孩子下标关系:i=2i+1
父节点和右边孩子下标关系:i=2i+2

猜你喜欢

转载自blog.csdn.net/weixin_47514459/article/details/115055598