练习题:数据排序

第一部分:考点和作答区

考点:

  • 列表操作
  • 循环
  • 条件判断
  • 函数定义

题目描述: 编写一个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' 作为算法名称来测试快速排序。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值