python中输入n个整数、请把这n个数由小到大排序_python练习5:输入三个整数 x,y,z,请把这三个数由小到大输出。…
输入三个整数 x,y,z,请把这三个数由小到大输出。
排序最简单的就是直接调用内置函数sort()
通过input()函数获取x,y,z将他们存入列表list
然后调用list.sort()进行排序
# 输入三个整数 x,y,z,请把这三个数由小到大输出。
x = input('请输入x:')
y = input('请输入y:')
z = input('请输入z:')
# list = [] #先定义列表才能使用append()方法 只有列表才可以使用append方法,没声明之前解释器无法判断类型为列表,而是字符型
# list.append(x,y,z) #append()方法只能有一个参数
list = [x,y,z] #直接给list赋值
print('排序前:',list)
list.sort() #sort()是内置的排序函数,可以排序字符类型。 默认为升序
print('升序:',list)
list.sort(reverse=True) # 如果需要降序排列,则需要传递一个reverse=True作为参数
print('降序:',list)
因为这个题用到了排序,我就想练习一下常用的排序方法,说是练习实际上因为很久不使用已经快忘了,所以最近也看了下原理试着写了出来,
(1)冒泡排序
def BubbleSort(self):
list_len = len(self)
for i in range(list_len):
for j in range(list_len - 1):
if self[j] > self[j + 1]:
self[j], self[j + 1] = self[j + 1], self[j]
print('冒泡排序:', self)
# BubbleSort(list)
(2)选择排序
def SelectionSort(self):
list_len = len(self)
for i in range(list_len):
for j in range(i + 1, list_len):
if self[i] > self[j]:
self[i], self[j] = self[j], self[i]
print('选择排序:', self)
# SelectionSort(list)
(3)插入排序
def InsertionSort(self):
list_len = len(self)
# for i in range(list_len-1):
# for j in range(list_len):
# if self[i] < self[j] and self[i] < self[j - 1]:
# self[j], self[i] = self[i], self[j]
# elif self[j] < self[i] and self[j] > self[i - 1]:
# self[j], self[i - 1] = self[i - 1], self[j]
# else:
# break
for i in range(list_len): # 0-14
j = i
for x in range(i):
if self[j] < self[j - 1]:
self[j], self[j - 1] = self[j - 1], self[j]
j = j - 1
while self[j] > self[j - 1] and self[j] < self[j + 1]:
break
print('插入排序:', self)
# InsertionSort(list)
(4)希尔排序
def ShellSort(self):
list_len = len(self)
increment = list_len
while increment >= 2:
increment = increment//2
print(increment)
# print(self)
for j in range(increment, list_len):
# print(self)
print(increment)
while j - increment >= 0:
print(self)
if self[j] < self[j - increment]:
# print(self)
self[j], self[j - increment] = self[j - increment], self[j]
j -= increment
else:
break
print('希尔排序:', self)
# ShellSort(list)
希尔排序是一种优化的排序方法,他的时间复杂度不是O(N²),而是根据增量increment计算的
总结:我只用了四种排序方式,并且在运行定义的方法的时候要确保上一个方法注释没有被运行,不然可能会和我一样以为自己写的方法是正确的,第二次使用时候发现不正确。
我自己试着写出来的时候也参考了其他人的代码,至于原理是这个博主的,它使用的是java代码
https://blog.csdn.net/liang_gu/article/details/80627548
记得看他的这篇文章之前看一下下方的评论,文中可能有描述错误的地方,(不知道现在改了没有)。