目录
回溯算法
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]