python算法

本文介绍了几种基础的计算机算法,包括回溯算法在全排列问题中的应用,贪心算法解决找零问题,分治法实现的归并排序,以及两种经典的排序算法——冒泡排序和快速排序。这些算法展示了不同的解决问题的思路和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

  1. 回溯算法
  2. 贪心算法
  3. 分治法
  4. 冒泡排序
  5. 快速排序

回溯算法

def backtrack(nums, path, res):
    if len(path) == len(nums):
        res.append(path[:])
        return
    for num in nums:
        if num not in path:
            path.append(num)
            backtrack(nums, path, res)
            path.remove(num)

# 示例:
my_nums = [1, 2, 3]
my_path = []
my_res = []
backtrack(my_nums, my_path, my_res)
print(my_res)  # 输出: [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]

贪心算法

def greedy_algorithm(coins, target):
    coins.sort(reverse=True)
    result = []
    for coin in coins:
        while target >= coin:
            result.append(coin)
            target -= coin
    return result

# 示例:
my_coins = [1, 5, 10, 25]
my_target = 47
my_result = greedy_algorithm(my_coins, my_target)
print(my_result)  # 输出: [25, 10, 10, 1, 1]

分治法

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    
    # 分解:将数组分成两半
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    
    # 解决:递归地对每个子数组排序
    return merge(left, right)

def merge(left, right):
    merged = []
    i, j = 0, 0
    
    # 合并:按照顺序合并两个有序数组
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            merged.append(left[i])
            i += 1
        else:
            merged.append(right[j])
            j += 1
    
    merged.extend(left[i:])
    merged.extend(right[j:])
    
    return merged

# 示例
my_list = [64, 34, 25, 12, 22, 11, 90]
sorted_list = merge_sort(my_list)
print(sorted_list)  # 输出: [11, 12, 22, 25, 34, 64, 90]

冒泡排序

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

# 示例:
my_list = [64, 34, 25, 12, 22, 11, 90]
sorted_list = bubble_sort(my_list)
print(sorted_list)  # 输出: [11, 12, 22, 25, 34, 64, 90]

快速排序

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)

# 示例:
my_list = [64, 34, 25, 12, 22, 11, 90]
sorted_list = quick_sort(my_list)
print(sorted_list)  # 输出: [11, 12, 22, 25, 34, 64, 90]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值