一、题目要求:
写一个程序,要求从用户那里输入一组数字,然后将这些数字进行排序并输出结果。要求使用冒泡排序算法实现。
二、题目解释:
冒泡排序是一种基本的排序算法。它的基本思路是从第一个元素开始,依次比较相邻的两个元素,如果前面的元素比后面的元素大,则交换这两个元素的位置。经过一轮比较之后,最大的元素就被排到了最后的位置。接着从第一个元素开始,重复上述的比较和交换操作,直到所有元素都排好序为止。
三、代码实现:
def bubble_sort(nums):
# 获取列表的长度
n = len(nums)
# 外层循环,控制比较的轮数
for i in range(n-1):
# 内层循环,比较相邻的两个元素,进行交换
for j in range(n-1-i):
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
return nums
# 从用户输入中获取数字列表
nums = [int(x) for x in input("请输入一组数字,用空格分隔:").split()]
# 调用冒泡排序算法进行排序
sorted_nums = bubble_sort(nums)
# 输出排序后的结果
print("排序后的结果为:", sorted_nums)
四、代码注释:
bubble_sort
函数:定义冒泡排序算法。n = len(nums)
:获取列表的长度。- 外层循环
for i in range(n-1)
:控制比较的轮数,每轮确定一个数的位置,所以比较的轮数为列表长度减一。 - 内层循环
for j in range(n-1-i)
:比较相邻的两个元素,进行交换。由于每轮确定了一个数的位置,所以每轮比较的元素个数也会少一个,因此内层循环的终止条件为列表长度减一减去已确定位置的数的个数。 if nums[j] > nums[j+1]:
:判断相邻的两个元素的大小关系,如果前面的元素比后面的元素大,则进行交换。nums[j], nums[j+1] = nums[j+1], nums[j]
:交换相邻的两个元素。return nums
:返回排序后的列表。nums = [int(x) for x in input("请输入一组数字,用空格分隔:").split()]
:从用户输入中获取数字列表。使用input
函数获取用户输入的字符串,然后使用split
方法将其分隔成一个个数字,再使用列表推导式将其转换为整型列表。sorted_nums = bubble_sort(nums)
:调用bubble_sort
函数进行排序,将排序后的
五、总结一下
还需要补充此类题目应该注意的问题。
此类排序题目的难度并不高,但需要注意以下几点:
- 确定排序算法:不同的排序算法适用于不同的场景,比如冒泡排序适用于小规模的数据,快速排序适用于大规模的数据。在实际应用中需要根据数据规模和性能要求选择合适的算法。
- 输入数据的合法性:需要考虑用户输入数据的合法性,比如是否全是数字,是否超出了数据范围等等。
- 代码的可读性:写出来的代码不仅要能够正确地排序数据,还要考虑代码的可读性,尽量写出简洁、清晰、易懂的代码。
- 算法的时间复杂度:冒泡排序算法的时间复杂度为 $O(n^2)$,当数据规模较大时,性能可能会比较低下。因此在实际应用中需要考虑算法的时间复杂度,尽可能选择时间复杂度较低的算法。