100个不同类型的python语言趣味编程题
在求解的过程中培养编程兴趣,拓展编程思维,提高编程能力。
第一部分:趣味算法入门;第八题:
8.冒泡排序:对N个整数(数据由键盘输入)进行升序排序
冒泡排序的思想:首先从表头开始往后扫描数组,在扫描的过程中逐对比较相邻的俩个元素的大小。若相邻的两个元素中,前面的元素大于后面的元素,则将它们互换,称之为消去了一个逆序,在扫描的过程中不断的将两相邻元素中的大者往后移动,最后就将数组中的最大者换到了表的最后,然后在剩下的数组元素中(n-1)个元素重复上面的过程,将次小元素放到倒数第二个位置。不断重复以上过程,直到剩下的数组元素为0为止,此时数组就变成了有序。
常用的排序方法有:冒泡排序、选择排序、插入排序、快速排序和堆排序等。
我定义了冒泡排序和选择排序的函数,以比较两者排序方法的不同之处,其他排序方法还请自测。
#解题方法示例如下;
def Maopao(list): #冒泡排序函数
for i in range(1,len(list)):
for j in range(len(list)-i):
if list[j] > list[j+1]:
list[j],list[j+1] = list[j+1],list[j]
return list
def Xuanze(list): #选择排序函数
for i in range(len(list)):
for j in range(i+1,len(list)):
if list[i] > list[j]:
list[j],list[i] = list[i],list[j]
return list
n = 1
numbers = [] #获得用户输入的数字
while True:
a = input('请依次输入要比较的第{}数,输入q取消输入(不分大小写):'.format(n))
if a.lower() == 'q':
break
elif a.isdecimal():
numbers.append(int(a))
n += 1
else:
print('请输入数字或者‘q’') #进行简单的排错
print(Maopao(numbers)) #调用冒泡排序函数
print(Xuanze(numbers)) #调用选择排序函数
#解本问题有多种方法,此方法并不是标准答案,读者可以自己尝试各种方法
选择排序思想:扫描整个线性表,第一轮比较拿数组中的第一个元素与其他元素进行比较,遇到比第一个小的则进行交换,再拿者交换之后的第一个元素接着上次比较的位置与后面的元素进行比较,直到扫描到线性表的最后,从中选出最小的元素,将它变换的表的最前面,第二轮比较是的时候从第二个元素开始,依次与第三个、第四个直到最后一个比较,在比较的过程中有比第二个元素小的进行交换,接着与后面的元素比较,剩下的字表采用同样的方法,直到字表为空。