第一部分:考点和作答区
考点:
- 列表操作
- 循环
- 条件判断
- 函数定义
题目描述: 编写一个Python函数 sort_numbers
,该函数接受一个整数列表作为输入,并返回一个新列表,其中包含原列表中的数字,并且按照从大到小的顺序排列。如果原列表为空,则返回一个空列表。
例如,输入列表 [3, 1, 4, 1, 5, 9]
应返回 [9, 5, 4, 3, 1, 1]
。
作答区:
# 请在此处编写你的代码
第二部分:答案
def sort_numbers(numbers):
if not numbers:
return []
sorted_numbers = sorted(numbers, reverse=True)
return sorted_numbers
# 测试代码
test_list = [3, 1, 4, 1, 5, 9]
print(sort_numbers(test_list)) # 输出应为 [9, 5, 4, 3, 1, 1]
第三部分:扩展考点和扩展作答区
扩展考点:
- 列表推导式
- 排序算法(如:快速排序、归并排序)
扩展题目描述: 扩展 sort_numbers
函数,使其能够支持多种排序算法。提供两种不同的排序算法,并要求用户选择其中一种进行排序。
作答区:
# 请在此处编写你的代码
第四部分:答案
def sort_numbers(numbers, algorithm='default'):
if not numbers:
return []
if algorithm == 'default':
return sorted(numbers, reverse=True)
elif algorithm == 'quick':
quick_sort(numbers, 0, len(numbers) - 1)
return numbers
elif algorithm == 'merge':
merge_sort(numbers)
return numbers
def quick_sort(arr, low, high):
if low < high:
pivot_index = partition(arr, low, high)
quick_sort(arr, low, pivot_index - 1)
quick_sort(arr, pivot_index + 1, high)
def partition(arr, low, high):
pivot = arr[high]
i = low - 1
for j in range(low, high):
if arr[j] > pivot:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i + 1], arr[high] = arr[high], arr[i + 1]
return i + 1
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
left_half = arr[:mid]
right_half = arr[mid:]
merge_sort(left_half)
merge_sort(right_half)
i = j = k = 0
# Copy data to temp arrays left_half[] and right_half[]
while i < len(left_half) and j < len(right_half):
if left_half[i] > right_half[j]:
arr[k] = left_half[i]
i += 1
else:
arr[k] = right_half[j]
j += 1
k += 1
# Checking if any element was left
while i < len(left_half):
arr[k] = left_half[i]
i += 1
k += 1
while j < len(right_half):
arr[k] = right_half[j]
j += 1
k += 1
www.jmtsrcw.com
www.jmhsrcw.com
www.jmepzpw.com
www.xxwhrcw.com
www.xyzyrc.com
# 测试代码
test_list = [3, 1, 4, 1, 5, 9]
print(sort_numbers(test_list, 'quick')) # 输出应为 [9, 5, 4, 3, 1, 1]
在这个扩展的答案中,我们修改了 sort_numbers
函数,使其能够支持多种排序算法。用户可以通过传递不同的算法名称来选择排序算法。我们提供了快速排序和归并排序两种算法。快速排序是通过递归实现的,而归并排序是通过分治法实现的。在测试代码中,我们使用了 'quick'
作为算法名称来测试快速排序。