python:排序算法——冒泡排序


1、什么是冒泡排序

所谓冒泡排序就是:将一个数列中的数字两两之间进行比较,如果第一个元素大于或小于第二个元素,那么就将两个元素位置交换,然后这个小或大值再往下两两比较,使最大或最小值慢慢浮到数列的最顶端,这样的排序算法我们称之为冒泡排序。

2、工作原理

(1)首先要获取一个数列,或者说一个容器,那么len(容器) >= 2,否则我想排序就没有意义

(2)你要对一个数列中的数字元素进行排序,然后两两之间要进行比较。因为是两两之间进行比较,那么最后比较的次数就应当为 len(list) -1 次,那么这个外循环的作用就是设置比较的次数

(3)接下来必须要有一个内循环,那么这个内循环就是操控元素之间比较的(通过索引取值比较),并且内循环比较完就要拿到一个极端值(即最大最小值),拿到以后我们就不能动这个元素了,接下来只比较剩下的元素,那么内循环的次数就应为 len(list) -1 - i(外循环的值)。

(4)通过内循环,我们可以拿到每一次的索引,并且拿到每一次的索引,我们要与下一个索引的值作比较,并且根据降序或者升序(即大于等于号)做出判断。

(5)当判断结果成立,那么我们就要将相邻的两个元素做交换,最终使得每次的极端值浮出水面

(6)最终我们不必返回该列表,因为我们已经交换了位置,也就是已经排好了序

3、示例(升序排列)

def sort(list):
    # 当列表的长度大于2排序才有意义
    if len(list) > 2:
        # 外循环的次数为列表中元素两两比较的次数
        for time in range(len(list) - 1):
            # 由于每次比较完都会将最大元素放置到最后,那么排好序的元素就不能动,只能动前边没有排好的
            # 索引每次必须减去外循环遍历的值
            for index in range(len(list) - 1 - time):
                # 当第一个元素大于它后边的元素
                if list[index] > list[index + 1]:
                    # 那么就交换位置
                    list[index], list[index + 1] = list[index + 1], list[index]
    else:
        print("列表中元素长度不足以排序")


if __name__ == '__main__':
    mylist = [34, 565, 21332, 8979, 2344, 8989, 1]
    sort(mylist)
    print(mylist)

运行结果:

[1, 34, 565, 2344, 8979, 8989, 21332]

Process finished with exit code 0