依次接受用户输出的3个数,排升序后打印(四种方法)
- 转换int后,判断大小排序(if…else)
a = int(input('num1')) b = int(input('num2')) c = int(input('num3')) if a>=b: if c>=a: print(b,a,c) elif b>c: print(c,b,a) else: print(b,c,a) else: if b<c: print(a,b,c) elif a<c and b>c: print(a,c,b) else: print(c,a,b)
可改进之处:
①:可创建列表,利用for循环控制输入个数,接下来利用索引比较大小
nums=[] for i in range(3): a = input('nums') nums.append(int(a)) b = nums
②:可用format函数填充,减少代码输入
nums=[] for i in range(3): nums.append(int(input('{}: '.format(i))))
- 使用min排序
nums=[] out = None for i in range(3): nums.append(int(input('{}: '.format(i)))) while True: cur = min(nums) print(cur) nums.remove(cur) if len(nums) == 1: print(nums[0]) break
- 使用列表的sort方法
#法三: a = int(input('num1')) b = int(input('num2')) c = int(input('num3')) n = [a,b,c] n.sort() print(n)
- 冒泡法
冒泡排序(Bubble Sort): 重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。
走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列).
- 交换排序
- 两两比较大小,交换位置
- 结果分升序和降序
- 需要数据一轮轮比较
- 可以设定一个标记判断此轮是否有数据交换法三,如无结束排序
- 最差的排序情况下,遍历次数n(n-1)/2
- 最好排序情况下,遍历次数n-1
- 时间复杂度O(n^2)(由遍历次数(n-1)n得出)
法一(冒泡法简单实现):
num_list = [ [1,9,8,5,6,7,4,3,2], [1,2,3,4,5,6,7,8,9] ] nums = num_list[0] print(nums) length = len(nums) count_swap = 0 count = 0 for i in range(length): for j in range(length-i-1): count += 1 if nums[j] > nums[j+1]: tmp = nums[j] nums[j] = nums[j+1] nums[j+1] = tmp count_swap += 1 print(nums,count_swap,count)
法一可优化点:法一情况下,即使某一趟已全部排序完成,也会走完剩余扫描过程,可以加入count_swap,如为0,则认为交换已完成
num_list = [ [1,9,8,5,6,7,4,3,2], [1,2,3,4,5,6,7,8,9] ] nums = num_list[1] print(nums) length = len(nums) count_swap = 0 count = 0 for i in range(length): flag = False for j in range(length-i-1): count += 1 if nums[j] > nums[j+1]: tmp = nums[j] nums[j] = nums[j+1] nums[j+1] = tmp flag = True count_swap += 1 if not flag: break print(nums,count_swap,count)
文章来源: https://blog.csdn.net/Nikki0126/article/details/88826977