Java教程

数据结构与算法 8.冒泡排序 BubbleSort

本文主要是介绍数据结构与算法 8.冒泡排序 BubbleSort,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

冒泡排序 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]
这篇关于数据结构与算法 8.冒泡排序 BubbleSort的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!