冒泡排序 BubbleSort
比较相邻的元素
升序排列时,如果第一个比第二个大,就将两个元素交换位置,否则比较第二个和第三个元素,降序反之
对每一对相邻的元素做同样的操作,直至完成遍历,此时序列中最大/最小的元素将被选出放在末尾
这样一轮比较,叫做一次冒泡
针对所有的元素重复以上的步骤,除了上一轮中最后一个元素
当没有任何一对元素需要比较时,排序完成
复杂度:最优时间复杂度:O(n) 遍历后发现没有需要交换的元素,排序结束
最差时间复杂度:O(n^2) 每轮需要交换(n-1)次,需冒泡(n-1)轮
稳定性:稳定
缺点:交换操作过于频繁,处理庞大数据时效率太低(计算机执行写操作是非常消耗资源的)
升序排列
def bubble_sort(varlist):
# 逆序遍历需要排序的列表
for j in range(len(varlist)-1,0,-1) :
# 遍历从起始位置到外层循环所处位置
for i in range(j) :
# 上面两个循环嵌套后,就完成了已排序部分和未排序部分的分离
# 随着循环进行,每一轮循环筛选出一个最大/最小元素,并处于序列末尾,构成已排序部分,未排序部分逐渐缩小
# 从未排序部分第一个元素开始,比较自身与后一个元素的大小
if varlist[i] > varlist[i+1] :
varlist[i],varlist[i+1] = varlist[i+1],varlist[i]
varl = [30,2,78,6,818,1,395]
bubble_sort(varl)
print(varl)
[1, 2, 6, 30, 78, 395, 818]