python栈、冒泡排序、选择排序

栈:

有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特征在于只能允许在容器的一端进入加入数据和输出数据的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。

栈的结构实现

栈可以用顺序表实现,也可以用链表实现。

栈的操作

Stack() 创建⼀个新的空栈
push(item) 添加⼀个新的元素item到栈顶
pop() 弹出栈顶元素
peek() 返回栈顶元素
is_empty() 判断栈是否为空
size() 返回栈的元素个数
栈: 先进后出
队列:先进先出

队列的操作

队列(queue)是只允许在⼀端进⾏插⼊操作,⽽在另⼀端进⾏删除操作的
线性表。
Queue() 创建一个空的队列
enqueue(item) 往队列中添加一个item元素
dequeue() 从队列头部删除一个元素
is_empty() 判断一个队列是否为空
size() 返回队列的大小

双端队列

双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。
Deque() 创建⼀个空的双端队列
add_front(item) 从队头加⼊⼀个item元素
add_rear(item) 从队尾加⼊⼀个item元素
remove_front() 从队头删除⼀个item元素
remove_rear() 从队尾删除⼀个item元素
is_empty() 判断双端队列是否为空
size() 返回队列的⼤⼩

排序与 搜索

排序算法是一种能将一串数据依照特定的顺序进行排列的一种算法。
排序算法的稳定性
稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。
冒泡排序
冒泡排序(英语:Bubble Sort)是⼀种简单的排序算法。它重复地遍历要排
序的数列,⼀次⽐较两个元素,如果他们的顺序错误就把他们交换过来。遍
历数列的⼯作是重复地进⾏直到没有再需要交换,也就是说该数列已经排序
完成。这个算法的名字由来是因为越⼩的元素会经由交换慢慢“浮”到数列的
顶端。

def bubble_sort(alist):
	for j in range(len(alist)-1,0,-1):
		#j表示每次遍历需要⽐较的次数,是逐渐减⼩的
		for i in range(j):
			if alist[i] > alist[i+1]:
				 alist[i], alist[i+1] = alist[i+1], alist[i]
li = [54,26,93,17,77,31,44,55,20]
bubble_sort(li)
print(li)

时间复杂度
最优时间复杂度:O(n) (表示遍历⼀次发现没有任何可以交换的元素,
排序结束。)
最坏时间复杂度:O(n )
稳定性:稳定
选择排序
选择排序(Selection sort)是⼀种简单直观的排序算法。
选择排序的主要优点与数据移动有关。
时间复杂度
最优时间复杂度:O(n )
最坏时间复杂度:O(n )
稳定性:不稳定(考虑升序每次选择最⼤的情况)

···

def paixu(li):
    n = len(li)
    for i in range(n -1):  # 需要进⾏n-1次选择操作
        a = i  # 记录最⼩位置
        for j in range(i + 1,n):   # 从i+1位置到末尾选择出最⼩数据
            if li[a] > li[j]:
                a = j
        if a != i:  # 如果选择出的数据不在正确位置,进⾏交换
            li[i],li[a]=li[a],li[i]
li = [54, 26, 93, 17, 77, 31, 44, 55, 20]
paixu(li)
print(li)

···

猜你喜欢

转载自blog.csdn.net/weixin_44786231/article/details/88874914