从键盘接收若干个整数(直接输入回车表示结束),用冒泡法或选择法进行排序(从小到大),并将排序结果在屏幕上输出。同时估计算法的复杂度。
一、思路:
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]