12. python冒泡排序和选择排序

从键盘接收若干个整数(直接输入回车表示结束),用冒泡法选择法进行排序(从小到大),并将排序结果在屏幕上输出。同时估计算法的复杂度。

一、思路:

1. 冒泡法:重复地走访要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误,就把他们交换过来。重复直到没有相邻元素交换,则表示排序完成。

2. 选择法: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

上述两个程序算法的时间复杂度均为 O(n2).

二、代码:

1. 冒泡:

def bubble(List):
    for i in range(0, len(List)-1):
        for j in range(len(List)-1, i, -1):  # 很少用第3个参数,默认步长为-1
            if List[j-1] > List[j]:  # 基于上面-1,所以是倒过来从倒数第一和倒数第二开始比较
                List[j-1], List[j] = List[j], List[j-1]  # 不倒过来比较的话,首尾的数字没办法比较
    return List
L1 = []
num_str = input(' 请输入一个需排序的整数(不输入直接回车则结束): ')
while len(num_str) != 0:
    L1.append(int(num_str))
    num_str = input(' 请输入一个需排序的整数(不输入直接回车则结束): ')
print(' 排序前结果 :', L1)
print(' 排序后结果 :', bubble(L1))

2. 选择:

def bubble(List):
    num = len(List)
    for i in range(0, num):   # 核心
        for j in range(i+1, num):  # 核心
            if List[i] > List[j]:
                List[i], List[j] = List[j], List[i]
    return List
L1 = []
digit = input('请输入一个需排序的整数(不输入按回车即可退出):')
while len(digit) != 0:
        L1.append(int(digit))
        digit = input('请输入一个需排序的整数(不输入按回车即可退出):')
print('排序前', L1)
print('排序后', bubble(L1))

三、输出:

请输入一个需排序的整数(不输入按回车即可退出):3
请输入一个需排序的整数(不输入按回车即可退出):2
请输入一个需排序的整数(不输入按回车即可退出):1
请输入一个需排序的整数(不输入按回车即可退出):
排序前 [3, 2, 1]
排序后 [1, 2, 3]

猜你喜欢

转载自blog.csdn.net/YYHEZB/article/details/81289136
今日推荐