使用python实现排序算法(Bubble Sort)

冒泡排序是一个种简单的排序算法,对需要排序的数列元素进行两两对比,并按照从小到大的顺序进行位置交换来实现对整个数列的排序。

bubbles

算法描述:

冒泡排序算法的具体步骤及描述如下:

  1. 提取数列中的第一个元素,与数列中的下一个元素进行对比,如果第一个元素大于第二个元素则交换两者的位置。否则继续向后对比。
  2. 如果第一个元素小于第二个元素,则使用第二个元素继续向后进行两两对比。
  3. 针对数列中的所有三元素重复以上的步骤。

bubble-sort-2

算法实现:

#导入随机数库
import random
#生成10个1-100之间的随机数
list=random.sample(range(1, 100), 10)

#查看生成的10个随机数
list
[81, 23, 22, 56, 94, 47, 62, 6, 87, 17]

def bubble_sort(list):
 
    #把list赋值给unsorted用于排序操作
    unsorted=list[:]
    #如果数据序列中只有一个数字,则不进行排序,直接返回数据序列
    if len(unsorted)==1: 
        return print("list只有一个数字",unsorted)
    else:
        print("原始list:",unsorted)
 
    # 循环提取unsorted中的每一个位置及数值与后面的数值进行比较
    for i, _ in enumerate(unsorted):
        print("待比较的位置:",i,"比较的数字:",unsorted[i])
        # 循环提取unsorted中的每一个位置及数值用于比较
        for i, _ in enumerate(unsorted):
            #异常处理
            try:
                print("被比较的位置:",i+1,"被比较的数字",unsorted[i+1])
                # 如果待比较位置的数值大于后面位置的数值
                if unsorted[i] > unsorted[i+1]:
                    print("当前位置的数字",unsorted[i],"是否大于后面一个位置的数字:",unsorted[i+1],(unsorted[i] > unsorted[i+1]))
                    # 交换这两个数值的位置
                    unsorted[i], unsorted[i+1] = unsorted[i+1], unsorted[i]
                    print("交换两个数字的位置:","原数字",unsorted[i],"交换后的数字",unsorted[i+1])
            #在对比的结尾出现IndexError: list index out of range
            except IndexError:
                # 忽略错误并继续
                continue
 
        # 输出本轮排序后的结果并换行
        print("本轮排序后的结果:",unsorted,"\n")
 
 
bubble_sort(list)

原始list: [81, 23, 22, 56, 94, 47, 62, 6, 87, 17]
待比较的位置: 0 比较的数字: 81
被比较的位置: 1 被比较的数字 23
当前位置的数字 81 是否大于后面一个位置的数字: 23 True
交换两个数字的位置: 原数字 23 交换后的数字 81
被比较的位置: 2 被比较的数字 22
当前位置的数字 81 是否大于后面一个位置的数字: 22 True
交换两个数字的位置: 原数字 22 交换后的数字 81
被比较的位置: 3 被比较的数字 56
当前位置的数字 81 是否大于后面一个位置的数字: 56 True
交换两个数字的位置: 原数字 56 交换后的数字 81
被比较的位置: 4 被比较的数字 94
被比较的位置: 5 被比较的数字 47
当前位置的数字 94 是否大于后面一个位置的数字: 47 True
交换两个数字的位置: 原数字 47 交换后的数字 94
被比较的位置: 6 被比较的数字 62
当前位置的数字 94 是否大于后面一个位置的数字: 62 True
交换两个数字的位置: 原数字 62 交换后的数字 94
被比较的位置: 7 被比较的数字 6
当前位置的数字 94 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 94
被比较的位置: 8 被比较的数字 87
当前位置的数字 94 是否大于后面一个位置的数字: 87 True
交换两个数字的位置: 原数字 87 交换后的数字 94
被比较的位置: 9 被比较的数字 17
当前位置的数字 94 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 94
本轮排序后的结果: [23, 22, 56, 81, 47, 62, 6, 87, 17, 94]

待比较的位置: 1 比较的数字: 22
被比较的位置: 1 被比较的数字 22
当前位置的数字 23 是否大于后面一个位置的数字: 22 True
交换两个数字的位置: 原数字 22 交换后的数字 23
被比较的位置: 2 被比较的数字 56
被比较的位置: 3 被比较的数字 81
被比较的位置: 4 被比较的数字 47
当前位置的数字 81 是否大于后面一个位置的数字: 47 True
交换两个数字的位置: 原数字 47 交换后的数字 81
被比较的位置: 5 被比较的数字 62
当前位置的数字 81 是否大于后面一个位置的数字: 62 True
交换两个数字的位置: 原数字 62 交换后的数字 81
被比较的位置: 6 被比较的数字 6
当前位置的数字 81 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 81
被比较的位置: 7 被比较的数字 87
被比较的位置: 8 被比较的数字 17
当前位置的数字 87 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [22, 23, 56, 47, 62, 6, 81, 17, 87, 94]

待比较的位置: 2 比较的数字: 56
被比较的位置: 1 被比较的数字 23
被比较的位置: 2 被比较的数字 56
被比较的位置: 3 被比较的数字 47
当前位置的数字 56 是否大于后面一个位置的数字: 47 True
交换两个数字的位置: 原数字 47 交换后的数字 56
被比较的位置: 4 被比较的数字 62
被比较的位置: 5 被比较的数字 6
当前位置的数字 62 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 62
被比较的位置: 6 被比较的数字 81
被比较的位置: 7 被比较的数字 17
当前位置的数字 81 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [22, 23, 47, 56, 6, 62, 17, 81, 87, 94]

待比较的位置: 3 比较的数字: 56
被比较的位置: 1 被比较的数字 23
被比较的位置: 2 被比较的数字 47
被比较的位置: 3 被比较的数字 56
被比较的位置: 4 被比较的数字 6
当前位置的数字 56 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 56
被比较的位置: 5 被比较的数字 62
被比较的位置: 6 被比较的数字 17
当前位置的数字 62 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [22, 23, 47, 6, 56, 17, 62, 81, 87, 94]

待比较的位置: 4 比较的数字: 56
被比较的位置: 1 被比较的数字 23
被比较的位置: 2 被比较的数字 47
被比较的位置: 3 被比较的数字 6
当前位置的数字 47 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 47
被比较的位置: 4 被比较的数字 56
被比较的位置: 5 被比较的数字 17
当前位置的数字 56 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [22, 23, 6, 47, 17, 56, 62, 81, 87, 94]

待比较的位置: 5 比较的数字: 56
被比较的位置: 1 被比较的数字 23
被比较的位置: 2 被比较的数字 6
当前位置的数字 23 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 23
被比较的位置: 3 被比较的数字 47
被比较的位置: 4 被比较的数字 17
当前位置的数字 47 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 47
被比较的位置: 5 被比较的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [22, 6, 23, 17, 47, 56, 62, 81, 87, 94]

待比较的位置: 6 比较的数字: 62
被比较的位置: 1 被比较的数字 6
当前位置的数字 22 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 22
被比较的位置: 2 被比较的数字 23
被比较的位置: 3 被比较的数字 17
当前位置的数字 23 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 23
被比较的位置: 4 被比较的数字 47
被比较的位置: 5 被比较的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [6, 22, 17, 23, 47, 56, 62, 81, 87, 94]

待比较的位置: 7 比较的数字: 81
被比较的位置: 1 被比较的数字 22
被比较的位置: 2 被比较的数字 17
当前位置的数字 22 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 22
被比较的位置: 3 被比较的数字 23
被比较的位置: 4 被比较的数字 47
被比较的位置: 5 被比较的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [6, 17, 22, 23, 47, 56, 62, 81, 87, 94]

待比较的位置: 8 比较的数字: 87
被比较的位置: 1 被比较的数字 17
被比较的位置: 2 被比较的数字 22
被比较的位置: 3 被比较的数字 23
被比较的位置: 4 被比较的数字 47
被比较的位置: 5 被比较的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [6, 17, 22, 23, 47, 56, 62, 81, 87, 94]

待比较的位置: 9 比较的数字: 94
被比较的位置: 1 被比较的数字 17
被比较的位置: 2 被比较的数字 22
被比较的位置: 3 被比较的数字 23
被比较的位置: 4 被比较的数字 47
被比较的位置: 5 被比较的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [6, 17, 22, 23, 47, 56, 62, 81, 87, 94]

 

def bubble_sort(list):
    unsorted=list[:]
    if len(unsorted)==1: 
        return print("list只有一个数字",unsorted)
    else:
        print("原始list:",unsorted)
 
    for i, _ in enumerate(unsorted):
        for i, _ in enumerate(unsorted):
            try:
                if unsorted[i] > unsorted[i+1]:
                    unsorted[i], unsorted[i+1] = unsorted[i+1], unsorted[i]
            except IndexError:
                continue
        print("排序后结果:",unsorted)
 
 
bubble_sort(list)

原始list: [81, 23, 22, 56, 94, 47, 62, 6, 87, 17]
排序后结果: [23, 22, 56, 81, 47, 62, 6, 87, 17, 94]
排序后结果: [22, 23, 56, 47, 62, 6, 81, 17, 87, 94]
排序后结果: [22, 23, 47, 56, 6, 62, 17, 81, 87, 94]
排序后结果: [22, 23, 47, 6, 56, 17, 62, 81, 87, 94]
排序后结果: [22, 23, 6, 47, 17, 56, 62, 81, 87, 94]
排序后结果: [22, 6, 23, 17, 47, 56, 62, 81, 87, 94]
排序后结果: [6, 22, 17, 23, 47, 56, 62, 81, 87, 94]
排序后结果: [6, 17, 22, 23, 47, 56, 62, 81, 87, 94]
排序后结果: [6, 17, 22, 23, 47, 56, 62, 81, 87, 94]
排序后结果: [6, 17, 22, 23, 47, 56, 62, 81, 87, 94]

—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“蓝鲸网站分析博客”。】—

Speak Your Mind

*